持有对象之间的相互关系。

简单的容器分类:


其中,ListIterator是Iterator的子类,仅供List使用(这里漏画了一条从List导向ListIterator的线),通过List.ListIterator()方法可以生成一个ListIterator的对象。同样,因为List继承Collection,同样可以通过iterator()方法生成一个Iterator的对象(同理,Set,Queue都可以这样)。值得注意的一点是:Set,Queue接口中并没有ListIterator的方法,因此它们并不可以生成ListIterator的对象(顾名思义,ListIterator仅供List使用)。

Map接口可以通过keySet()方法生成一个一个Map所有键组成的Set列。

LinkedList同时实现了List,Set,Queue这三个接口,它里面包含了很多方法,通常用于栈(先进后出),队列(先进先出),和双头队列的使用,同时,相比较于ArrayList对于List的使用上,在插入和移除的时候,LinkedList更为出色,在随机访问时则稍微逊色。

ListIterator相比较于Iterator则多了很多功能,Iterator只能单向移动,且只有“读”的功能,里面只包含了三种方法(hasNext(),next(),remove()),而ListIterator则多了双向移动(next(),previous()实现),实现了“读写”两个功能(set(),add()方法则实现了“写”的功能),并且还可以通过listIterator(n)指向一个一开始就指向索引为n处的ListIterator。(Set,Queue没有ListIterator,只有Iterator,是如何实现ListIterator的功能的呢?通过LinkList?还是说没有这方面的需求?如果通过LinkList就可以实现ListIterator的功能,那为什么还要有ListIterator呢?)

Collection继承了Iterable,而Iterable里面有一个方法Iterator<E> iterator();因此所有Collection都能够产生一个迭代器,而迭代器是都能够被用于foreach语句中的,所以在thinking in java 则通过返回一个匿名内部类(Iterable),并改写iterator()方法,使该方法返回的迭代器(Iterator)的迭代方式是反向迭代的方法来实现反向迭代器的功能的(代码在我的博客:《反向迭代器》中)。

猜你喜欢

转载自blog.csdn.net/qq_41791653/article/details/80137749
今日推荐