本文是从《java程序员面试宝典》摘抄出来的。
(1) java容器类一共有两种主要类型: collection和map。
collection和map的区别在于每个“槽”所存储的元素个数不同。collection类型中,每个“槽”只有一个元素;map中,持有key-value关联,像一个小型数据库。所有的java容器类都可以自动调整自己的尺寸。
(2) 各自旗下的子类关系如图。
collection的子类如下:
--ArrayList:
--LinkedList:
--HashSet
--TreeSet
--LinkedHashSet
collection,list,set,map都是接口,不能实例化。继承自它们的ArrayList,HashTable,stack是具体的class,这些才可以被实例化。
Vector容器确切的知道它所持有的对象的type,vector不进行边界检查。
(3) Collections类
这个类是针对集合类的一个帮助类,它提供了一系列的静态方法实现对各种集合类的搜索,排序等操作。相当于对Array进行类似操作的类--Arrays。如:
Collections.max(Collection col);
Collection.sort(List list);
(4)一些特殊的集合类是线程安全的,请参考这篇文章
http://www.ibm.com/developerworks/library/j-jtp07233/index.html
(5) 如何选择容器类
1,容器类和array的区别。
容器类仅能存储对象引用,而不是将对象复制一份放入数列的某个位置。对于primitive data,如int等,放入容器类和取出时就会被自动装箱,拆箱。
List,set,map将其中所有存储的对象视为object,也就是说一旦对象进入容器类,就损失了对象的type信息。例如:
public static void main(String arg[]){ int[] x = {'A'}; ArrayList a = new ArrayList(); for(int i=0;i<x.length;i++){ a.add(x[i]); } int j = (Integer) a.get(0); //这里如果不进行类型转换,则不能通过编译。 System.out.print(j); //这里打印出来的是A的asc码,65. }
或者使用泛型:
public static void main(String arg[]){ int[] x = {'A'}; ArrayList<Integer> a = new ArrayList<Integer>(); //注意这里只能是Integer而不是int,再次说明容器类只能装载对象,int这类非对象是不能直接装入的。 for(int i=0;i<x.length;i++){ a.add(x[i]); } int j = a.get(0); //此时就不必进行类型转换了。 System.out.print(j); }