Java集合--整体框架与迭代器

1. 集合的存在

数组和集合都可以当作容器,用来存储数据,但是数组的长度固定,不适用于存储数量未知的数据。

2. 集合框架

这里写图片描述

虽然还有一些遗漏的类或者接口,但可以从图中明显看出,java集合分为两大类,一种是实现了Collection接口的集合,从而引出其子类,List、Set、Queue,以及其更为高级的子类或者实现类,ArrayList、LinkedList等等;另一种是实现了Map接口的集合,包括HashMap、Hashtable等等。

3. 迭代器Iterator

3.1 含义

与集合密切相关的就是迭代器Iterator了,主要用来遍历集合中的元素。查看Collection源码可以发现,它是继承自Iterable接口的,Iterable接口中有一个方法返回一个迭代器:Iterator< T> iterator(); Collection继承了这个接口就可以使用迭代器了。这里不禁让人产生一个疑惑,为什么Collection不直接继承Iterator接口,而是要多定义一个Iterable接口,让Collection去继承Iterable,而不是Iterator呢? 如果让Collection直接继承Iterator接口,这样Collection本身就变成了一个迭代器了,它有next方法,hasNext方法,也就是说Collection包含着当前迭代的位置(状态),先不说多线程的情况了,就是单线程,如果一个方法遍历Collection,遍历了一半突然终止了,那么Collection中迭代的位置就在中间。而另一个方法接着遍历它,却发现只能遍历后一半的内容,前一半遍历不到,因为Iterator没有提供重置迭代位置的方法。而继承Iterable就不同了,它有一个iterator()方法,它能保证每一次调用iterator()方法,都能返回一个新的迭代器,不同的迭代器之间是互不影响的。这里我们看下ArrayList对于iterator方法的实现:

public Iterator<E> iterator() {
     return new Itr();
 }

 private class Itr implements Iterator<E>{
 	 ......
 }

每一次调用iterator()方法都会new一个新的迭代器

3.2 Iterator与ListIterator

ListIterator是List接口类集合特有的迭代器,继承自Iterator接口,除了继承了Iterator接口的next、hasNext、remove方法外,还具有hasPrevious、previous、nextIndex、previousIndex、set、add方法。通过它特有的这些方法,就可以知道它与Iterator有如下区别:
(1)Iterator只能遍历与删除,而ListIterator还可以添加和修改
(2)Iterator只能向后遍历,而ListIterator拥有hasPrevious、previous方法,还可以向前遍历
(3)ListIterator拥有nextIndex、previousIndex方法,可以定位到当前迭代器遍历的位置

4. Collections与Collection

上面说了,Collection是一个集合接口,而Collections类似一个集合的工具类,里面包含了很多静态方法,比如排序、比较大小等等

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值