谈谈你对集合的理解

  1. 集合有一个顶级类Collection接口,list和set继承这个接口,map是kv键值对的结构,

  2. list是单例数据的集合,存储的元素是有序且可重复的,主要的实现类由ArrayList、Vector和LinkedList,ArrayList的初始容量为10,它访问任意位置效率高,但是插入和删除数据时需要移动元素所有效率低,是线程非安全的,Vector是线程安全的,使用了synchoronized方法,所有性能比ArrayList差,LinkedList:使用的是双向链表存储数据,需要按照索引向前或者向后遍历,它插入数据时只需要记录本项的前后项即可,所有插入或者删除效率高,占用的内存相对较多,

  3. set元素是无序放入的,元素不可重复,并且只能通过迭代器来获取所有元素,主要的实现类由HashSet,HashSet基于HashMap实现

  4. Map是键值对结构,存储是无序的,主要的实现类由Hashmap和HashTable,HashMap初始容量为16,0.75的加载 因子,key不能重复,允许有一个null值,value没有要求,当建hash冲突时采用链地址法解决也就是数组加链表的方式,在jdk1.7之前,链表无论多长都是链表,链表长度过长会导致性能下降,在jdk1.8之后引入了红黑树,在链表长度超过8之后,自动转换为红黑树,小于6之后转换为链表,hashMap是线程非安全的,HashTable是线程安全的,基于Synchronized实现,但是效率低,在jdk1.5之后引入了ConcurrenthashMap,基于分段锁实现的,弥补了HashMap线程非安全,HashTabl性能低的缺失

  5. 还有一个集合的工具类Collentions,它包含了各种集合操作的静态方法

猜你喜欢

转载自www.cnblogs.com/Web-spring/p/12195740.html