JAVA容器
基本容器
map, set, list
Map特征
- HashMap: 以键值对方式存储,以hash计算存储位置,无序 key与value 都允许为null
- LinkedHashMap: 哈希表和链接列表实现,继承HashMap,与hashMap不同的是维护着一个运行于所有条目的双重链接列表,是按插入顺序排序
- TreeMap: 基于红黑树的实现,该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法
线程安全
- Hashtable : 与HashTable原理一致,但是synchronized是针对整张Hash表的,即每次锁住整张表让线程独占来保证线程安全, 阻塞的,效率低,已被 concurrentHashMap 取代
- concurrentHashMap: 使用了锁分离技术, 把Map分成了N个Segment,put和get的时候,都是现根据key.hashCode()算出放到哪个Segment中,并使用了多个锁来控制对hash表的不同部分进行的修改, 非阻塞的
Set特征
- set: 不允许重复值
- HashSet: 由哈希表(实际上是一个 HashMap 实例)支持。它不保证 set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用 null 元素。
初始化:
public HashSet() {
map = new HashMap<>();
}
插入:
public boolean add(E e) {
return map.put(e, PRESENT)==null;
}
- TreeSet: 基于 TreeMap 的 NavigableSet 实现
初始化:
public TreeSet() {
this(new TreeMap<E,Object>());
}
插入
public boolean add(E e) {
return m.put(e, PRESENT)==null;
}
List特征
- ArrayList: 动态数组的数据结构,自动扩容,适合随机访问
- 初始化大小为10
- 扩容时会copy整个数组,开支大
elementData = Arrays.copyOf(elementData, newCapacity);
- LinkedList: 基于链表的数据结构,适合删除插入操作

浙公网安备 33010602011771号