1、总体结构
Map和Collection是分开的。Collection下有List Queue Set 3个接口。
2、List结构
3、Set结构
4、Queue结构
5、Map结构
6、Deque结构
7、常用的List
ArrayList: 数组实现,初始长度10,每次扩容增加0.5倍(0.5倍可以通过位移>>1操作完成);
最大长度Integer.MAX_VALUE , 并非Integer.MAX_VALUE - 8;
LinkedList:双向链表实现, 可用于栈 队列实现。
线程安全:
Collections.synchronizedList(list)实现,
Vector也是线程安全的(过时 不建议使用)
CopyOnwriteArrayList
8、常用的Set
HashSet:以HashMap实现的,只能存一个null值
LinkedHashSet:继承HashSet 可以按存入的顺序进行迭代。
TreeSet:以TreeMap实现 内部按compareTo进行比较 所有不能存null,否则空指针异常。
ConcurrentHashSet(google guava实现)
9、常用的Queue
PriorityQueue : 非FIFO队列 按优先级排序
线程安全:
ArrayBlockingQueue:数组实现 阻塞队列 需要指明初始大小,线程安全
LinkedBlockingQueue:列表实现 阻塞队列,可以不指明初始大小,默认Integer.MAX_VALUE;线程安全
ConcurrentLinkedQueue:链表实现 不阻塞 长度无限制;线程安全
PriorityBlockingQueue : 优先级队列 线程安全版本
10、常用的Deque (双向队列 可当做栈使用,深度遍历算法时可以使用)
ArrayDeque:动态数组 长度是2的幂次方;作为栈时性能比LinkedList好;非线程安全
LinkedList:双向链表实现 ,非线程安全
线程安全:
ConcurrentLinkedDeque:链表实现
LinkedBlockingDeque:阻塞链表
栈的实现还有一个Stack类,继承Vector,线程安全(过时了 不建议使用)
11、常用的Map
HashMap:只能存放一个null key
TreeMap: 不能存放null key
线程安全:
ConcurrentHashMap:线程安全