第十一章 持有对象
首先给出一个整体类图结构:
常用的容器用黑色粗线框表示,点线框表示接口,实线框表示普通的类,带有空心箭头的点线表示一个特定的类实现了一个接口,实心箭头表示某个类可以生成箭头所指向类的对象。
添加一组元素
在java.util包中的Array和Collection类中都有很实用方法,Arrays.asList()方法接受一个数组或者是一个用逗号分隔的元素列表,并将其转换为一个List对象。Collections.addAll()方法接受一个Collection对象,数组,逗号分隔的列表。
Collections.reverseOrder产生的反序Comparator。
Collection和Iterator
Collection是描述所有序列容器的共性根接口。另外java.util.AbstractCollection类提供了Collection的默认实现,使得你可以创建AbstractCollection子类型而不必重复代码。
生成Iterator是将队列与消费队列的方法连接在一起耦合度最小的方式,并且与实现Collection相比,它在序列类上所施加的约束也少得多。
Foreach与迭代器
由于cs是一个Collection,所以这段代码展示了能够与foreach一起工作是所有Collection对象的特性。
之所以能够工作,是因为java SE5引入了新的被称为Iterable的接口,该接口包含一个能够产生Iterator的iterator方法,并且Iterator接口被foreach用来在序列中移动。因此如果你创建了任何实现了Iterable的类,都可以将它用于foreach语句中:
总结
如果要进行大量的随机访问,就使用ArrayList,如果要经常从表中间插入或删除元素,则应该使用LinkedList。
各种Queue以及栈的行为,由LinkedList支持。
Map是一种将对象与对象相关联的设计。HashMao设计用来快速访问;而TreeMap保持“键”始终处于排序状态,所以没有HashMap快。LinkedHashMap保持元素插入的顺序,但是也通过散列提供了快速访问能力。
Set不接受重复元素。HashSet提供最快的查询速度,而TreeSet保持元素处于排序状态。LinkedHashSet以插入顺序保存元素。
新程序中不应该使用过时的Vector Hashtable和Stack。