参考:https://blog.csdn.net/column/details/collection.html
仅作参考,待后续添加
ArrayList:
1: 基于数组的集合,查询快,使用时最好知道数据的数量。线程不安全。
2: JAVA 1.7 中默认初始化空的数组,第一次新加元素是会初始化10个元素空间的数组。当数组容量不够时,会创建一个1.5倍容量的新数组,并将原来的元素copy进新数组。
3: 数据复制, Arrays.copyOf() 和System.arraycopy 方法, 最后调用的都是 System.arraycopy, 此方法是本地方法, 在 openJDK中可以看源码
4: 序列化--> transient Object[] elementData 不可被序列化, 需要ObjectOutputStream/ObjectInputStream 利用反射调用ArrayList私有的序列化方法readObject/writeObejct,
5: fail-fast 理论, modCount == expectedModCount 报错原因: 在更改数组结构的同时没有将modCount 赋值给expectedModCount。这是迭代器可以remove的根本原因,删除后将modCount赋给了 expectedModCount,所以判断是相等的。
解决: 1. 使用Collections.synchronizedList 不推荐,增删有同步锁
2. 可以使用CopyOnWriteArrayList, 读写分离
LinkedList:
Vector:
HashMap:
HashSet:
HashTable:
并发库集合容器:
ConcurrentHashMap:
CopyOnWriteArrayList: