本例子介绍了一些基本类型的容器的打印,看如下一段代码:
package access;
import java.util.*;
public class PrintingContainers {
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", "Fuzzy");
map.put("cat", "Rags");
map.put("dog", "Bosco");
map.put("dog", "Spot");
return map;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
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在槽中保存了两个元素,键和与键相关的值。
此程序的输出结果调用的是容器提供的默认打印方法,也就是默认的toString方法,生成了直观的输出结果:
Collection打印出来的内容用[]扩住,内部元素间用“,”分割。
Map打印出来的内容用{}扩住,键与值用“=”连接。
第一个fill方法作用于所有类型的Collection,实现了用来添加新元素的add方法。
ArrayList和LinkedList同属于List类型,从输出来看,二者均按照被插入的顺序来保存元素。不同之处在于执行某种类型操作时的性能,LinkedList的方法多于ArrayList。
HashSet、TreeSet和LinkedHashSet均属于Set类型,输出显示在Set中,每个相同的项只保存一次,不同的Set存储元素的方式不同。HashSet采用十分复杂的方式来存储,这种技术是最快获得元素的方式;TreeSet按照比较结果的升序保存对象;LinkedHashSet按照被添加的顺序保存对象。
Map使我们可以用键来查找元素,就像一个简易数据库一样,对于每一个键来说,Map只接受存储一次。Map.put方法将增加一个键值对,在使用的过程中我们也并不需要考虑Map的尺寸,因为该容器可以自动调整尺寸,并且知道如何打印自己,显示相关联的键和值,键值对在Map中的保存顺序并非按照插入顺序。HashMap采用相当快速的算法来控制顺序,它也提供了最快的查找技术,没有按照任何明显的顺序来排列元素;而LinkedHashMap按照插入顺序保存元素的同时保留了HashMap的查询速度。