- Collection接口
两个基本方法:add()和iterator()
1. add(): 如果添加操作使得集合改变就返回true
2. 返回一个实现了Iterator接口的对象。 - 迭代器
Iterator接口共有4个方法
public interface Iterator<E>
{
E next();
boolean hasNext();
void remove();
default void forEachRemaining(Consumer<? super E> action);
}
应该将Java迭代器认为是连个元素之间。当调用next时,迭代器就越过下一个元素,并返回刚刚越过那个元素的引用。
- AbstractCollection类:为了防止每一个实现Collection的类都实现所有的方法,在此提供一些例行(如isEmpty、contains等)并抽象化一些基础方法(如size、iterator)。
- RandomAccess: 为了避免对链表完成随机访问操作,这个接口用来测试一个特定的集合是否支持高效的随机访问。
if (c instanceof RandomAccess){
use random access algorithm
} else {
use sequential access algorithm
}
- 链表:Java中,所有链表都是双向连接的
- ListIterator: 对自然有序的集合使用迭代器。
add(E); // 不返回Boolean,假定添加操作总会改变链表
// 正向遍历
next();
hasNext()
// 逆向遍历
previous()
hasPrevious()
remove();
// add方法只依赖于迭代器的位置,而remove方法依赖于迭代器的状态。
//add方法总是插入在当前光标的位置
hasNext(); // false
add(e); // e添加在表尾
// remove会删掉刚刚跳过的元素
- ArrayList: 封装了一个动态再分配的对象数组,异步。
- Vector: 同步,可以由两个线程安全的访问一个Vector对象
- HashSet: 基于散列表实现,冲突用链表(桶)解决,在Java8中,桶满时会从链表变为平衡二叉树。
- TreeSet: 有序集合,基于红黑树实现。
- 队列:Deque,两种实现:ArrayDeque和LinkedList,这两个类都提供了双端队列。
- 优先队列:基于堆实现
- 弱散列映射:WeakHashMap:用来解决当对键的唯一引用来自散列条目时,删除这个Entry.
它使用弱引用保存键,WeakReference对象将引用保存到另外一个对象中
在 WeakHashMap 中,当某个键不再正常使用时,会被从WeakHashMap中被自动移除。更精确地说,对于一个给定的键,其映射的
存在并不阻止垃圾回收器对该键的丢弃,这就使该键成为可终止的,被终止,然后被回收。某个键被终止时,它对应的键值对也就从
映射中有效地移除了。
这个“弱键”的原理呢?大致上就是,通过WeakReference和ReferenceQueue实现的。 WeakHashMap的key是“弱键”,即是
WeakReference类型的;ReferenceQueue是一个队列,它会保存被GC回收的“弱键”。
实现步骤是:
(1) 新建WeakHashMap,将“键值对”添加到WeakHashMap中。
实际上,WeakHashMap是通过数组table保存Entry(键值对);每一个Entry实际上是一个单向链表,即Entry是键值对链表。
(2) 当某“弱键”不再被其它对象引用,并被GC回收时。在GC回收该“弱键”时,这个“弱键”也同时会被添加到ReferenceQueue(queue)
队列中。
(3) 当下一次我们需要操作WeakHashMap时,会先同步table和queue。table中保存了全部的键值对,而queue中保存被GC回收的键
值对;同步它们,就是删除table中被GC回收的键值对。
-
链接散列集与映射:LinkedHashSet和LinkedHashMap,可以记住插入元素项的顺序,但是链接散列映射将用访问顺序,而不是插入顺序,对映射条目进行迭代,每次调用get或put,受到影响的条目将从当前的位置删除,并放到条目列表的尾部。
应用:将访问频率高的放在内存中,其他从数据库中读取。 -
IdentityHashMap: 标识散列映射。
这个类的散列值是用System.identityhashCode方法计算的。
在对两个对象比较时,使用==,而不是equals -
视图 通过使用视图可以获得其他实现了collection接口和Map接口的对象。
如映射类的keySet: keySet方法返回
应用:- 轻量级集合包装类 asList
- 子范围 subList
- 不可修改的视图
- 同步视图