List中元素存取是有序的、可重复的;Set集合中元素是无序的,不可重复的。
CopyOnWriteArrayList:COW的策略,即写时复制的策略。适用于读多写少的并发场景
Set集合元素存取无序,且元素不可重复。
HashSet不保证迭代顺序,线程不安全;LinkedHashSet是Set接口的哈希表和链接列表的实现,保证迭代顺序,线程不安全。
TreeSet:可以对Set集合中的元素排序,元素以二叉树形式存放,线程不安全。
3.2 ArrayList、LinkedList、Vector的区别
首先它们均是List接口的实现。
ArrayList、LinkedList的区别
1.随机存取:ArrayList是基于可变大小的数组实现,LinkedList是链接列表的实现。这也就决定了对于随机访问的get和set的操作,ArrayList要优于LinkedList,因为LinkedList要移动指针。
2.插入和删除:LinkedList要好一些,因为ArrayList要移动数据,更新索引。
3.内存消耗:LinkedList需要更多的内存,因为需要维护指向后继结点的指针。
Vector从JDK 1.0起就存在,在1.2时改为实现List接口,功能与ArrayList类似,但是Vector具备线程安全。