框架,是一个类的集。
容器,是可以容纳其他 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