java集合框架

by shihang.mai

1. 集合框架核心类图

java集合框架.png

2. List

特别提醒方法subList(),通过原list,返回一个子list.

  1. 对于非结构性的改变,都会影响彼此影响
  2. 对于结构性改变
  • 改变的是子list,不会触发fast-fail(因为modCount与expectedModCount同时改变)
  • 改变的是原list,触发fast-fail

2.1 ArrayList

ArrayList 是一个动态数组。它由数组实现,随机访问效率高,随机插入、随机删除效率低;

  • 它实现了 RandomAccess接口,快速随机访问
    在遍历List之前,可以用 if( list instanceof RamdomAccess ) 来判断一下。因为对于实现了RandomAccess接口,直接for循环比迭代器快
  • 它是非线程安全的,在多线程下,可以使用Collections.synchronizedList(List l)返回一个安全的list或者用CopyOnWriteArrayList
  • 初始容量为10(在加入元素时,才初始化),扩容为1.5倍

2.2 LinkedList

LinkedList 是一个双向链表。LinkedList 随机访问效率低,但随机插入、随机删除效率高。

LinkedList可作为Stack(栈)、Queue(队列)或Deque(双端队列:double-ended queue)进行使用

2.3 其他

Vector 是矢量队列,和ArrayList一样,它也是一个动态数组,由数组实现。但ArrayList是非线程安全的,而Vector是线程安全的,所有方法加上synchronized关键字

Stack先进后出

2.4 区别

  1. ArrayList和LinkedList区别
  • 非线程安全
  • ArrayList是Object数组,LinkedList是双向链表(1.6之前是循环链表,1.7取消了循环),意义:在两头,对于循环链表来说,由于首尾相连,还是需要处理两头的指针。而非循环链表只需要处理一边first.previous/last.next,所以理论上非循环链表更高效。恰恰在两头(链头/链尾) 操作是最普遍的
  • ArrayList用于数据的随机访问,LinkedList用于数据的增加删除修改
  1. ArrayList和Vector区别
  • Vector线程安全的;ArrayList非线程安全
  • 都是Object数组,但是扩容机制不同
  • 多线程访问安全数组,一般使用CopyOnWriteArrayList

3. Set

4. queue

5. Map

详情查看hashmap文章

你可能感兴趣的:(java集合框架)