1. Iterator 接口
public interface Iterator {
boolean hasNext();
E next();
default void remove() {
throw new UnsupportedOperationException("remove");
}
default void forEachRemaining(Consumer super E> action) {
Objects.requireNonNull(action);
while (hasNext())
action.accept(next());
}
}
1.1 Iterator遍历
@Test
public void test() {
List list = new ArrayList();
list.add("111");
list.add("222");
list.add("333");
Iterator iterator = list.iterator();
while (iterator.hasNext()) {
String next = iterator.next();
}
}
多层遍历
@Test
public void test() {
Map> map = new HashMap();
map.put(1001L, new HashSet(Arrays.asList("aaa", "bbb")));
map.put(1002L, new HashSet(Arrays.asList("ccc")));
// Iterator> iterator = map.values().iterator();
String next = map.values().iterator().next().iterator().next();
// 输出 next: aaa
}
1.2 遍历时注意事项
迭代过程中不能进行删除、添加操作,会抛异常java.util.ConcurrentModificationException
@Test
public void test() {
List list = new ArrayList();
list.add("111");
list.add("222");
list.add("333");
for (String str : list) {
if ("111".equals(str)) {
list.remove("111");
// list.add("444");
}
}
}
报错原因:
private class Itr implements Iterator {
final void checkForComodification() {
if (modCount != expectedModCount)
throw new ConcurrentModificationException();
}
}
改为iterator.remove()
Iterator iterator = list.iterator();
while (iterator.hasNext()) {
if ("111".equals(iterator.next())) {
iterator.remove();
}
}
2. Iterable 接口
public interface Iterable {
Iterator iterator();
default void forEach(Consumer super T> action) {
Objects.requireNonNull(action);
for (T t : this) {
action.accept(t);
}
}
}
实现 Iterable 接口,就拥有了获取迭代器的能力
2.1 集合里的迭代器
Collection 继承了 Iterable 接口
public interface Collection extends Iterable {
Iterator iterator();
}
public interface List extends Collection {
Iterator iterator();
}
public class ArrayList extends AbstractList
implements List, RandomAccess, Cloneable, java.io.Serializable {
public Iterator iterator() {
return new Itr();
}
// 内部类实现了 Iterator
private class Itr implements Iterator {
public boolean hasNext() {}
public E next() {}
public void remove() {}
}
}
2.2 Iterable 存在的意义
解耦,有些集合有多个 Iterator 内部类,可以获取不同的 Iterator 执行不一样的操作,比如ArrayList,LinkedList
public class ArrayList extends AbstractList
implements List, RandomAccess, Cloneable, java.io.Serializable {
public ListIterator listIterator() {
return new ListItr(0);
}
public Iterator iterator() {
return new Itr();
}
private class Itr implements Iterator {}
private class ListItr extends Itr implements ListIterator {}
}
【信息由网络或者个人提供,如有涉及版权请联系COOY资源网邮箱处理】
© 版权声明
本平台(www.cooy.cn)的一切软件、教程及内容信息仅限用于学习和研究,付费仅为收集整理归类费用;
不得将上述内容用于商业或者非法用途,否则一切后果用户自行承担负责。本平台资源、内容、信息均来自来自用户上传,版权争议及其他问题与本平台无关。
您必须在下载后的24个小时之内从您的电脑或手机中彻底删除上述下载内容,如果您喜欢该程序或内容,请支持正版以获取更好的服务。我们非常重视版权问题,如有侵权请发送邮件至下方邮件(655465@qq.com),敬请谅解!
如发现违法违规内容,请联系下方邮箱举报,我们收到后将会第一时间处理。
THE END
暂无评论内容