Java中并无像Perl、Python、Ruby那样对容器有直接的支持,可是能够依靠容器类来完成相同的工做;html
使用一个ArrayList对象能够保存一系列的对象,如: ArrayList apples = new ArrayList(); 申明一个ArrayList对象apples,接下来能够往apples中添加对象:apples.add(object),也能够根据索引获取对象:apples.get(index),此时,放置的对象都是Object类型的,这是不安全的类型,由于不能保证全部的对象都使用同一个接口,当里面放置了两种不一样类型的对象时,就会产生某些问题;java
为了使用更加安全的容器,须要用到泛型,如示例代码中展现的那样,使用一对尖括号来表示泛型:ArrayList<Apple> apples = new ArrayList<Apple>();此时,若是往该容器中添加其余类型的对象,编译器就会发现而且报错;同时能够看到,泛型支持向上转型;git
容器能够分为两种:github
1. Collection,单独元素的序列对象,包括:List、Set、Queue;编程
2. Map,一组成对的“键值对”对象;api
容器类型使用中,建立一个具体类的对象,而后转型为对应引用,以后针对该接口进行编程;如:ArrayList 是List的子类,能够申明:数组
List<Apple> apples = new ArrayList<Apple>();安全
此时ArrayList被向上转型为List,保证只用到List中的接口而没有用到ArrayList的特有接口的话,这样的申明可让对象的具体类变化更加方便,如更改成LinkedList:oracle
List<Apple> apples = new LinkedList<Apple>();app
而不用更改其余的任何代码,由于全部的工做都是在List的接口上进行的;
全部的Collection都支持foreach语法;
经过Collection.addAll()方法能够添加一个Collection对象来完成初始化;用新建一个空的Collection对象,而后再用Collections.addAll()方法来添加对象更加快捷,是首选的初始化方式;如示例代码中,新建Collections.addAll将更多的元素添加到第一个参数:collection对象中;一样的Arrays.asList()能够更加快捷地生成ArrayList对象;
Arrays.asList()可能会产生一些问题,并不能根据左边的式子进行向上转型,须要显示申明类型,如:Arrays.<Snow>asList();来进行准确的操做;
List类包含两种类型:
ArrayList:在数组中随机访问元素速度较快,可是插入元素和删除元素较慢;
LinkedList:访问元素速度较慢,可是插入和删除元素较快;
具体的方法查看手册:http://docs.oracle.com/javase/7/docs/api/java/util/List.html
LinkedList提供Queue和Stack的支持;因为设计上的缺陷,最好取消使用Stack,而使用LinkedList代替;
Map类包含:
HashMap:设计用来快速访问,其中键是无序保存;
TreeMap:键始终处于排序状态,访问速度较慢;
LinkedHashMap:保持元素的插入顺序,同时提供快速的访问能力;
这章讲的有的碎,比较好的是下面的分类图:
其中虚线框表示接口,实线框表示具体类,黑线框是比较经常使用的容器;空心箭头表示一个特定的类实线一个接口,实心箭头表示某个类能够生成箭头所指向类的对象;
具体的就看文档吧,感受更加清晰而且具体一些