迭代器接口------Iterator,ListIterator和Iterable

Iterator迭代器

迭代器是允许一致的方法对集合对象的元素进行访问

booleanhasNext() 如果仍有元素可以迭代,则返回 true
Enext() 返回迭代的下一个元素。
voidremove() 从迭代器指向的 collection 中移除迭代器返回的最后一个元素(可选操作)。
//remove 用法
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class IteratorPractice01 {
	public static void main(String[] args) {
		Collection<String> practice = new ArrayList<>();
		practice.add("张三");
		practice.add("李四");
		practice.add("王五");
		Iterator<String> c = practice.iterator();
		System.out.println(c.next());
		System.out.println(c.next());
		System.out.println(c.next());
		//删除迭代器当前所指向的元素
    	c.remove();
		System.out.println(practice);
	}
}

张三
李四
王五
[张三, 李四]
在迭代过程中调用集合的 remove(Object o) 可能会报 java.util.ConcurrentModificationException 异常
forEachRemaining 方法中 调用Iterator 的 remove 方法会报 java.lang.IllegalStateException 异常

ListIterator

voidadd(E e) 将指定的元素插入列表(可选操作)。
booleanhasNext() 以正向遍历列表时,如果列表迭代器有多个元素,则返回 true(换句话说,如果 next 返回一个元素而不是抛出异常,则返回 true)。
booleanhasPrevious() 如果以逆向遍历列表,列表迭代器有多个元素,则返回 true
Enext() 返回列表中的下一个元素。
intnextIndex() 返回对 next 的后续调用所返回元素的索引。
Eprevious() 返回列表中的前一个元素。
intpreviousIndex() 返回对 previous 的后续调用所返回元素的索引。
voidremove() 从列表中移除由 nextprevious 返回的最后一个元素(可选操作)。
voidset(E e) 用指定元素替换 nextprevious 返回的最后一个元素(可选操作)。

Iterable

Iterator<T>iterator() 返回一个在一组 T 类型的元素上进行迭代的迭代器。

为什么不用Iterator而使用Iterable实现Colletion的接口

1. Iterator是做迭代的,而Iterable是提供迭代器的。
2. 如果不设置Iterator,把next,hasNext等塞到集合里,那么这个集合就有了状态,因为必须在内部记录当前指针(cursor)所在位置。
3. 这样是不合理的。如果这么做就没办法在嵌套循环时对同一个集合做循环。
4. 不能够多线程
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值