java

iteratorable和iterable

2018-10-07  本文已影响0人  一个人的飘

Iterable

一个集合对象要表明自己支持迭代,能有使用foreach语句的特权,就必须实现Iterable接口,表明我是可迭代的!然而实现Iterable接口,就必需为foreach语句提供一个迭代器。

这个迭代器是用接口定义的 iterator方法提供的。也就是iterator方法需要返回一个Iterator对象。

public interface Iterable<T>

{

    Iterator<T> iterator();

}

Iterator

 包含3个方法: hasNext ,  next , remove。remove按需求实现,一般它很少用到,以至于Eclipse接口方法自动补全时,都忽略了remove放方法。

1、每次在迭代前   ,先调用hasNext()探测是否迭代到终点(本次还能再迭代吗?)。

2、next方法不仅要返回当前元素,还要后移游标cursor

3、remove()方法用来删除最近一次已经迭代出的元素

4、 迭代出的元素是原集合中元素的拷贝(重要)

5、配合foreach使用

6删除最近一次已近迭代出出去的那个元素。

    只有当next执行完后,才能调用remove函数。

    比如你要删除第一个元素,不能直接调用 remove()  而要先next一下( );

    在没有先调用next 就调用remove方法是会抛出异常的。


迭代出来的元素都是原来集合元素的拷贝

Java集合中保存的元素实质是对象的引用(可以理解为C中的指针),而非对象本身。

迭代出的元素也就都是 引用的拷贝,结果还是引用。那么,如果集合中保存的元素是可变类型的,我们就可以通过迭代出的元素修改原集合中的对象。

而对于不可变类型,如String  基本元素的包装类型Integer 都是则不会反应到原集合中。

上一篇下一篇

猜你喜欢

热点阅读