ArrayList LinkedList 与 Vector
ArrayList 基于动态数组,对于随机访问数据(get 与 set),ArrayList 比 LinkedList 快, 因为 LinkedList 要移动指针;
LinkedList 基于链表,对于添加与删除数据(add 与 remove),LinkedList 比 ArrayList 快,因为 ArrayList 需要移动数据;
Vector 类似 ArrayList ,不同的是Vector 是同步的;
HashSet LinkedHashSet 与 TreeSet
HashSet :快速访问;
HashMap 与 HashTable
Set 集合如何实现不重复添加大概过程
添加元素时首先判断是否为 null,如果非 null 调用元素的 hashcode()方法得到哈希值与其它元素比较,如果不同再调用 equals 方法比较其它元素,返回false则可添加。
CopyOnWriteArrayList 为何物?
它是 ArrayList 的一个线程安全的变体,其中所有可变操作(add、set 等等)都是通过对底层数组进行一次新的复制来实现的;
CopyOnWriterArrayList 无论是从数据结构、定义都和 ArrayList 一样。它和 ArrayList 一样,同样是实现 List 接口,底层使用数组实现。在方法上也包含add、remove、clear、
iterator等方法。
CopyOnWriterArrayList 根本就不会产生 ConcurrentModificationException 异常,也就是它使用迭代器完全不会产生 fail-fast 机制。
CopyOnWriterArrayList 什么时候可代替 ArrayList ?
1 在不能或不想进行同步遍历,但又需要从并发线程中排除冲突时;
2 当遍历操作的数量大大超过可变操作的数量时;