通用集合

通用集合

常用集合描述
名称 描述
ArrayList 一种可以动态增长和缩减的索引序列
LinkedList 一种可以在任何位置进行高效地插人和删除操作的有序序列
ArrayDeque 一种用循环数组实现的双端队列
HashSet 一种没有重复元素的无序集合
TreeSet 一种有序集
EnumSet 一种包含枚举类型值的集
LinkedHashSet 一种可以记住元素插人次序的集
PriorityQueue 一种允许高效删除最小元素的集合
HashMap 一种存储键值关联的数据结构
TreeMap 一种键值有序排列的映射表
EnumMap 一种键值属于枚举类型的映射表
LinkedHashMap 一种存储键/ 值关联的数据结构—种键值有序排列的映射表
WeakHashMap 一种其值无用武之地后可以被垃圾回收器回收的映射表
IdentityHashMap 一种用==而不是用equals 比较键值的映射表
旧集合
名称 描述
Vector 与ArrayList相似,但所有方法都是同步的
HashTable 与HashMap相似,但所有方法都是同步的
Properties 属性映射
集合工具类Collections
名称 描述
Collections.empty… 生成一个不可添加数据的空集合实例
Collections.singleton… 生成一个不可修改的含单一数据的集合实例
Collections.unmodifiable… 生成一个包装集合的不可添加数据的包装集合实例
Collections.synchronized… 生成一个包装集合的同步操作包装集合实例
Collections.checked… 生成一个包装集合的受查操作的集合实例
LinkedHashMap实现LRU算法(最近最少使用算法)
1
2
3
4
5
6
7
int capacity = 4;
LinkedHashMap<String, String> map = new LinkedHashMap<String, String>(capacity, 0.75f,true) {
@Override
protected boolean removeEldestEntry(Map.Entry<String, String> eldest) {
return size() > capacity; // 当返回true则删除最少使用的的数据
}
};
小知识:
  1. “for each”循环可以与任何实现了Iterable接口的对象一起工作
  2. 集合迭代器Iterator的remove与next/previous具有依赖性,调用remove之前没有调用next是不合法的,必须先调用next越过将要删除的元素
  3. Java 1.4针对集合引入了一个标记接口RandomAccess,用于标记该集合是否支持高效的随机访问,如:ArrayList(实现)和LinkedList(未实现)
  4. Collection集合类内部维护了一个计数器modCount,负责跟踪列表的结构性修改,如添加元素、删除元素等。在新建迭代器的同时会缓存此时的计数器,在改写操作时判断缓存的计数器值与集合类的计数器值是否一致,不一致则抛出ConcurrentModificastionException异常。注意:集合的set方法不被视为结构性修改,这会造成多个迭代器遍历出的结果不一定一致
  5. 链表为模型的集合,多次使用get获取某个位置的元素效率极低,可以使用列表迭代器ListIterator的nextIndex、next、previousIndex、previous等方法优化该操作,备注:ListIterator的add和set方法也是插入操作的一个优化点
  6. 原本**for(Map.Entry<> entry : map.entrySet())**的map遍历操作最高效,在Java 1.8后直接通过map.forEach方法直接操作node更加高效