总结与区别:
Set: 去重;
set去重本质:equals+hashcode;
常见的HashSet、TreeSet。
HashSet基于哈希表实现,插入、删除、查找。不保证顺序
TreeSet基于红黑树实现,保证顺序,查找较快; treeSet:排序 继承comparable接口进行比较排序
Set不是线程安全的。高并发时,可使用Collections 中的synchronizedSet 或者ConCurrentSkipListSet;
ConCurrentSkipListSet 线程安全示例代码:
List:有序集合,允许元素重复。常见的有ArrayList、LinkedList。
Arraylist 是基于动态数组实现的。随机访问和快速遍历;
Linkedlist 基于双向链表实现的,对于插入和删除效率较高。
List不是线程安全的(代码如下图)。高并发时,修改可能导致数据不一致;如有线程安全要求:可使用 Collections 中的synchronizedList方法进行。或者(java.util.ConCurrent)CopyOrWriteArrayList类。(代码如下图)