通用集合
常用集合描述
名称 | 描述 |
---|---|
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 | int capacity = 4; |
小知识:
- “for each”循环可以与任何实现了Iterable接口的对象一起工作
- 集合迭代器Iterator的remove与next/previous具有依赖性,调用remove之前没有调用next是不合法的,必须先调用next越过将要删除的元素
- Java 1.4针对集合引入了一个标记接口RandomAccess,用于标记该集合是否支持高效的随机访问,如:ArrayList(实现)和LinkedList(未实现)
- Collection集合类内部维护了一个计数器modCount,负责跟踪列表的结构性修改,如添加元素、删除元素等。在新建迭代器的同时会缓存此时的计数器,在改写操作时判断缓存的计数器值与集合类的计数器值是否一致,不一致则抛出ConcurrentModificastionException异常。注意:集合的set方法不被视为结构性修改,这会造成多个迭代器遍历出的结果不一定一致
- 以链表为模型的集合,多次使用get获取某个位置的元素效率极低,可以使用列表迭代器ListIterator的nextIndex、next、previousIndex、previous等方法优化该操作,备注:ListIterator的add和set方法也是插入操作的一个优化点
- 原本**for(Map.Entry<> entry : map.entrySet())**的map遍历操作最高效,在Java 1.8后直接通过map.forEach方法直接操作node更加高效