学习各种集合容器最好先从基本接口入手,之前在《Java集合框架学习(1)——概览》中已经梳理清楚了各个类和接口的脉络,现在就从最基本的Collection来看一下:
1 | public interface Collection<E> extends Iterable<E> { |
这样来看基本的集合操作就一目了然,需要注意的是toArray方法,有两个重构的方法,下面来看一些细节:
1 | List<Integer> list = new ArrayList<Integer>(); |
运行时会报java.lang.ClassCastException。看了一下ArrayList中toArray的实现,在不带参数的toArray方法里:
1 | // 不带参数的toArray |
采用无参的toArray,在三目运算中直接返回Object数组,此时进行转型是不安全的下溯造型(Downcasting),会产生ClassCastException,这也就是上述问题的原因了。
采用有参的toArray,newType.getCommponentType()返回数组内容的类型,根据该类型构造对应类型的数组copy,于是不会有问题。
Collection继承了Iterable接口,接下来再看一下这个接口:
1 | package java.lang; |
文档中是这样说的,只要实现了这个接口,就可以使用for-each循环来遍历目标对象。需要注意的是,Iterable这个接口比较特殊,不在java.util中。
下一篇来学习一下继承了Collection接口的三个基本接口——List、Set、Queue。