java set实现literator_Java 迭代器接口

记录Java 迭代器相关概念和使用中发现的需要注意的点。

基本概念

如果原本是对着List 编码的,但是后来发现如果能够把相同的代码应用于Set ,将会非常方便,此时该如何做?此时通用代码只是使用容器,不知道或者不关心容器的类型。迭代器的概念可以达成此目的。

迭代器是一个对象,它的工作是遍历并选择序列中的对象,而客户端程序员不必知道或关心该序列底层的结构。此外,迭代器通常被称为轻量级对象:创建它的代价小。

Java 的 Iterator 只能单向移动,只能用来以下操作:

#使用方法iterator() 要求容器返回一个 Iterator,该 Iterator 将准备好返回序列的第一个元素。

#使用方法hasNext() 检查序列中是否还有元素。

#使用方法next() 获得序列中的下一个元素。

#使用方法remove() 将迭代器新返回的元素删除。

看源码所知

Iterator 接口

Iterator 接口从 jdk1.2 开始引入,是一个泛型接口,jdk1.8之前有三个方法:

/*** 如果迭代中还有更多的元素就返回 true*@return{@codetrue} if the iteration has more elements*/booleanhasNext();

/** * 返回迭代中的下一个元素,如果没有就抛出异常:NoSuchElementException

* @returnthe next element in the iteration*@throwsNoSuchElementException if the iteration has no more elements*/Enext();

/**

* 从基础集合中删除该迭代器返回的上一个元素(可选操作)。

* 每次调用next(),只能调用一次此方法。 * 如果在迭代进行过程中以其他方式(而不是通过调用此方法)修改了基础集合,则未指定迭代器的行为。从ArrayList 实现来看很有可能触发快速失败。

* 该方法默认实现是抛出异常:UnsupportedOperationException,迭代器不支持该方法也抛出该异常* 如果没有调用next() 或者调用next() 后已经调用过该方法时,调用该方法会抛出异常:IllegalStateException

*@throwsIllegalStateException if the {@codenext} method has not* yet been called, or the {@coderemove} method has already* been called after the last call to the {@codenext}* method*/default voidremove() {

throw newUnsupportedOperationException("remove");}

方法注释说明了方法的作用,什么情况下使用,某些情况下需要抛出什么异常。

Iterable 接口

Iterable 接口是从jdk1.5 引入的,也是个泛型接口,jdk1.8之前就一个方法:

/** * 返回一个指定类型的元素上的迭代器

* @returnan Iterator.*/Iterator iterator();

目前需要迭代器的容器都是实现该接口。

参考资料:

《Java 编程思想》

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值