集合
Java 集合框架
-
将集合的接口与实现分离
-
Collection 接口
// 接口的基本方法 public interface Collection<E> { boolean add(E element); // 向集合中添加元素,集合中不允许重复对象。 Iterator<E> iterator();} // 迭代器对象将依次访问集合中的元素
-
迭代器
// 包含四个方法: public interface Iterator<E> { E next(); // 通过反复调用 next 方法,可以逐个访问集合中的每个元素。 boolean hasNext(); // 调用 next 之前需要先调用 hasNext 确保不会访问越界导致抛出异常。 void remove(); // 删除上次调用 next 方法时返回的元素。不能连续两次调用,必须先调用 next。 // 对 forEachReamining 提供一个 lambda 表达式,将对迭代器的每一个元素调用这个 lambda 表达式。 default void forEachRemaining(Consumer<? super E> action);} // iterator.forEachRemaining(element -> do something with element);
-
集合框架中的接口
-
链表
-
在 Java 中,所有链表实际上都是双向连接的。
-
// LinkedList 接口 void add(E element); // 将对象添加到链表的尾部。 // ListIteration 接口 E previous() // 反向迭代链表,和 next 相同 boolean hasPrevious() void add(E element) // 在迭代器位置前添加一个新对象。 void set(E element) // 取代调用 next 或 previous 方法返回的上一个元素。
-
当某个迭代器修改器,另一个迭代器对其遍历,将会跑出异常。
-
为了避免并发修改,建议只设置一个读写迭代器,和多个只读迭代器。
-
使用链表的唯一理由是尽可能减少在列表中间插入或删除元素所付出的代价
-