1.集合概览
1.Java集合主要由两大接口派生而来,Collection,Map
2.Collection接口主要有三个子接口,List,Set,Queue;Map主要用于存放键值对
2.List,Set,Queue,Map的区别
1.List:有序,可重复
2.Set:无序,不可重复
3.Queue:有序,可重复
4.Map:存放键值对,key是无序不可重复,value是可重复的
注意:这里的无序并不是指随意位置存放,而是根据hash值进行定位。
3.集合底层数据结构
3.1.List
1.Vector:数组,线程安全
2.ArrayList:数组,线程不安全
3.LinkedList:双向链表,线程不安全
4.CopyOnWriteList:数组,底层基于复制的,使用lock锁,线程安全
3.2.Set
1.HashSet:底层HashMap
2.LinkedHashSet:底层LinkedHashMap
3.TreeSet:底层红黑树
3.3.Queue
1.PriorityQueue:使用数组实现的小顶堆
2.ArrayQueue:底层数组+双指针,使用数组模拟队列
3.4.Map
1.HashMap:底层数组+链表,若链表长度大于8,先判断数组长度是否小于64,如果是,就先扩容数组,解决哈希冲突,否则将链表转为红黑树。
2.LinkedHashMap:底层数组+链表,在HashMap的基础上增加了节点之间的双向链表,保持了插入的顺序性。
3.HashTable:数组+链表,线程安全,但是效率低,每次操作都全局上锁,并发度低。
4.ConCurrentHashMap:jdk1.7之前是分段数组+链表,jdk1.8及以后是Node数组+链表,分段上锁,只对操作的部分进行上锁,提高了并发度,同时保证线程安全。
5.TreeMap:底层红黑树,需要对map进行排序,就选它。
4.Vector和ArrayList的区别
未完待续......