Java的容器分为两类,分别是Collection和Map,先看例子:
public class CollectionAndMap {
static Collection fill(Collection<String> collection){
collection.add("rat");
collection.add("cat");
collection.add("dog");
collection.add("dog");
return collection;
}
static Map fill(Map<String,String> map){
map.put("rat","小黑");
map.put("cat","小花");
map.put("dog","大黄");
map.put("dog","二黄");
return map;
}
public static void main(String[] args) {
System.out.println(fill(new ArrayList<String>()));
System.out.println(fill(new LinkedList<String>()));
System.out.println(fill(new HashSet<String>()));
System.out.println(fill(new TreeSet<String>()));
System.out.println(fill(new LinkedHashSet<String>()));
System.out.println(fill(new HashMap<String, String>()));
System.out.println(fill(new TreeMap<String, String>()));
System.out.println(fill(new LinkedHashMap<String, String>()));
}
}
这里展示了Java容器类库中的两种主要类型,他们的区别在于容器中每个“槽”保存的元素个数。Collection在每个槽中只能保存一个元素。此类容器包括:List,它以特定的顺序保存一组元素;Set,元素不能重复;Queue,只允许在容器的一“端”插入对象,并从另一“端”移除对象。Map在每个槽内保存两个对象,即键和与之关联的值。
此外,从输出可以看出,不同的Set实现存储元素的方式也不同:HashSet使用的是相当复杂的方式来存储元素的,但是这种技术是最快的获取元素的方式,因此,存储的顺序看起来毫无意义。如果顺序很重要,那么可以使用TreeSet,它按照比较结果的升序保存对象;后者使用LinkedHashSet,它按照被添加的顺序保存对象。
上例使用了三种风格的Map:HashMap、TreeMap和LinkedHashMap。与HashSet一样,HashMap也提供了最快的查找技术,也没有按照任何明显的顺序来保存其元素。TreeMap按照比较结果的升序保存键,而LinkedHashMap则按照插入顺序保存键,同时还保留了HashMap的查询速度。