集合接口

Wu Jun 2020-01-01 12:43:49
Categories: > > Tags:

框架,是一个类的集。

容器,是可以容纳其他 Java 对象的对象。

JDK 1.2 开始,Java 集合框架(JCF)提供了通用的容器。

JDK 1.5 开始,集合类是带有类型参数的泛型类。

Java 容器里只能放对象,基本类型会自动装箱。

集合中也是值传递。

1 接口与实现

1.1 接口

为了规范容器的行为,统一设计,JCF定义了 14 种容器接口

Map 接口没有继承自 Collection 接口,因为 Map 表示的是关联式容器而不是集合。

JDK 1.6 开始,Stack 已被 Deque 取代。

1.2 实现

上述接口的通用实现见下表:

Implementations
Hash Table Resizable Array Balanced Tree Linked List Hash Table + Linked List
Interfaces Set HashSet TreeSet LinkedHashSet
List ArrayList LinkedList
Deque ArrayDeque LinkedList
Map HashMap TreeMap LinkedHashMap

2 迭代器(Iterator)

Collection 的 iterator 方法返回一个迭代器对象。可以使用这 iterator 依次访问集合中的元素。

public interface Iterator<E> {
    boolean hasNext();
    E next();
    void remove();
}

2.1 Iterator 中的循环

先 hasNext(),再 next() 取用一个对象。

Collection<String> c = ...;
Iterator<String> iter = c.iterator();
while(iter.hasNext()){
    String element =iter.next();
}

JDK 1.5 开始,提供增强“for each”循环支持 Iterable 接口。

for(String element : c){}

Collection接口扩展了Iterable接口,任何集合都可以使用增强for循环。

2.2 Iterator 中的 remove 方法

Iterator.next 类似 InputStream.read,调用、读取、消耗。

next 方法和 remove 方法具有相互依赖型,调用 remove 之前没有调用 next 是不合法的。

remove 是指删除最后遍历的元素

it.next();
it.remove();//OK

it.next();
it.remove();
it.remove();//IllegalStateException