//声明:部分内容引自《Java编程思想(第四版)》机械工业出版社
– 使用泛型容器:ArrayList<Apple> apples = new ArrayList<Apple>();
可以在编译期防止将错误类型的对象放置到容器中;在取出元素时,也不必强制类型转换。
– 所有的 Collection 都可以用 foreach 语法遍历。
– 注意:
package holding;//: holding/AsListInference.java
// Arrays.asList() makes its best guess about type.
import java.util.*;
class Snow {}
class Powder extends Snow {}
class Light extends Powder {}
class Heavy extends Powder {}
class Crusty extends Snow {}
class Slush extends Snow {}
public class AsListInference {
public static void main(String[] args) {
List<Snow> snow1 = Arrays.asList(
new Crusty(), new Slush(), new Powder());
// Won't compile:
// List<Snow> snow2 = Arrays.asList(
// new Light(), new Heavy());
// Compiler says:
// found : java.util.List<Powder>
// required: java.util.List<Snow>
// Collections.addAll() doesn't get confused:
List<Snow> snow3 = new ArrayList<Snow>();
Collections.addAll(snow3, new Light(), new Heavy());
// Give a hint using an
// explicit type argument specification:
List<Snow> snow4 = Arrays.<Snow>asList(
new Light(), new Heavy());
}
} ///:~
– 容器类库的两种主要类型:
Collection: 每个位置只能保存一个元素。
包括:List ,Set(元素不能重复), Queue。
Map: 每个位置保存两个对象:“键”-“值”,对于每个“键”,Map 只接受存储一次。
【迭代器】
– Iterator 的功能:
使用方法 iterator() 要求容器返回一个 Iterator。Iterator 将准备好返回序列的第一个元素。
使用 next() 获得序列中的下一个元素。
使用 hasNext() 检查序列中是否还有元素。
使用 remove() 将迭代器新近返回的元素删除。
– 只遍历,不修改,则 foreach 更为简洁。
– display() 方法遍历序列,而不包含任何有关它所遍历序列的类型信息。
– PriorityQueue 优先级队列:下一个弹出的元素是优先级最高的元素。
– 当要实现Collection 时,可用 foreach 迭代,当实现非 Collection 的外部类时,可用 Iterator 实现。
– 如果要进行大量的随机访问,就使用 ArrayList;如果要经常从表中间插入或删除元素,则应该使用 LinkedList。
– HaspMap 用来快速访问;TreeMap 保持“键”始终处于排序状态,所以没有 HashMap 快。LinkedHashMap 保持元素插入的顺序,但是也通过散列提供了快速访问能力。
– HashSet 提供最快的查询速度,TreeSet 保持元素处于排序状态。LinkedHashSet 以插入顺序保存元素。
(常用容器用紫色线框表示,点线框表示接口,实线框表示普通的(具体的)类。带有空心箭头的点线表示一个特定的类实现了一个接口,实心的箭头表示某个类可以生成箭头所指向类的对象。)