本文主要介绍Java中可以使用的几种遍历方式。


Java中的遍历

  • 定义
  • 循环(for、while)
  • 遍历foreach(for)
  • foreach(for)过程中如何修改数据的问题
  • 解决方案
  • 迭代器(Iterator)
  • java.util.Arrays.toString()


定义

遍历(Traversal):指沿着某条搜索路线,依次对树(或图)中每个节点均做一次访问。我自己的理解,“遍历”就是指将所给结构中的内容逐一访问,但是是否进行操作,还要看需求。

循环(for、while)

for(int i=0;i<=arr.length;i++)
white(n != 0)

int[] arr= {1,2,3,4,5,6,7,8,9};
arr.add(4);
对否?

遍历foreach(for)

本身基于Iterator实现,效率不高;不能操作集合。

int[] arr= {1,2,3,4,5,6,7,8,9};
//无需下标
for(int a : arr) {
System.out.println(a);
}

foreach(for)过程中如何修改数据的问题

因为增强for循环(foreach循环)本质上是隐式的iterator,由于在删除和添加的时候会导致modCount发生变化,但是没有重新设置expectedModCount,当你使用list.remove()后遍历执行iterator.next()时,方法检验modCount的值和的expectedModCount值,如果不相等,就会报ConcurrentModificationException。

解决方案

使用iterator.remove();正确与否,待确认

详见Java集合——遍历集合元素并修改

迭代器(Iterator)

迭代器Iterator只能在集合中使用。集合有Connlection 、Map两种, 这两种都是接口类型。Connlection中的子接口有List ,List有实现类 ArrayList。
详细代码看迭代器和SET的遍历。

上面各个类型的代码示例,可以参考这篇。

java.util.Arrays.toString()

利用jdk自带的方法 --> java.util.Arrays.toString()
待验证

public class ThroughTheArray {	
	public static void main(String[] args) {		
	// TODO Auto-generated method stub
	
	int[] arr = {12,4,1,66,54,6,74,-3};//静态创建一个数组。why,是因为在静态主函数里?
	System.out.println(java.util.Arrays.toString(arr));
	}
}