我是靠谱客的博主 超级宝马,最近开发中收集的这篇文章主要介绍迭代器接口------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. 不能够多线程

最后

以上就是超级宝马为你收集整理的迭代器接口------Iterator,ListIterator和Iterable的全部内容,希望文章能够帮你解决迭代器接口------Iterator,ListIterator和Iterable所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(61)

评论列表共有 0 条评论

立即
投稿
返回
顶部