java中的容器类

本文是从《java程序员面试宝典》摘抄出来的。


(1) java容器类一共有两种主要类型: collection和map。

collection和map的区别在于每个“槽”所存储的元素个数不同。collection类型中,每个“槽”只有一个元素;map中,持有key-value关联,像一个小型数据库。所有的java容器类都可以自动调整自己的尺寸。

(2) 各自旗下的子类关系如图。

collection的子类如下:

  • --List

               --ArrayList:

               --LinkedList:

  • --Set: 每个值只能保存1个对象,不能含有重复的元素。

               --HashSet

               --TreeSet

               --LinkedHashSet

  • Queue:先进先出的集合类


java中的容器类_第1张图片


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);
    }

通过上例可以发现int[] x={'A'};并不会报错,这是因为array天生就具有了类似泛型的功能:只要通过编译,运行时就不会出错。array会检查放入其中的元素的类型,如果这句改为int[] x={“A”};则无法通过编译。




你可能感兴趣的:(java中的容器类)