我是靠谱客的博主 留胡子寒风,这篇文章主要介绍for(:)增强,Iterator迭代器,现在分享给大家,希望可以做个参考。

复制代码
1
2
1、在JDK5之前对于数组或者list的遍历需要根据长度,以及下标进行遍历于是就有了其遍历方式
复制代码
1
2
3
4
5
List<String> list = new ArrayList<String>(); for (int index = 0; index < list.size(); index++ ) { String str = list.get(index); System.out.println("str: " + str); }
复制代码
1
2
2、在JDK5之后引入了:增强特性使list的遍历,进行改变
复制代码
1
2
3
4
List<String> list = new ArrayList<String>(); for (String str : list){ System.out.println("str:" + str); }
复制代码
1
2
3、反编译class文件可以看到增强for循环会被编译器自动处理如下代码:
复制代码
1
2
3
4
5
6
7
List<String> list = new ArrayList<String>(); Iterator var4 = list.iterator(); while(var4.hasNext()) { str = (String)var4.next(); System.out.println("str:" + str); }
复制代码
1
2
即JDK在编译java文件的时候会将:符号以JDK的特性进行转换成list的迭代器,接着通过获取迭代器的下一元素处理数据

在ArrayList类的里面存着一个内部类Itr 实现了Iterator的接口

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
public Iterator<E> iterator() { return new Itr(); } /** * An optimized version of AbstractList.Itr */ private class Itr implements Iterator<E> { int cursor; // index of next element to return int lastRet = -1; // index of last element returned; -1 if no such int expectedModCount = modCount; public boolean hasNext() { return cursor != size; } @SuppressWarnings("unchecked") public E next() { checkForComodification(); int i = cursor; if (i >= size) throw new NoSuchElementException(); Object[] elementData = ArrayList.this.elementData; if (i >= elementData.length) throw new ConcurrentModificationException(); cursor = i + 1; return (E) elementData[lastRet = i]; } public void remove() { if (lastRet < 0) throw new IllegalStateException(); checkForComodification(); try { ArrayList.this.remove(lastRet); cursor = lastRet; lastRet = -1; expectedModCount = modCount; } catch (IndexOutOfBoundsException ex) { throw new ConcurrentModificationException(); } }

迭代器的原理是通过记录上一次读取数据的下标,以及下一次要下标,从而通过cursor和lastRet直接对集合的元素进行访问

最后

以上就是留胡子寒风最近收集整理的关于for(:)增强,Iterator迭代器的全部内容,更多相关for(内容请搜索靠谱客的其他文章。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部