本文主要介绍Java中可以使用的几种遍历方式。
Java中的遍历
定义
遍历(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();正确与否,待确认
迭代器(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));
}
}
再推荐几篇文章,感觉写的也很全面。等有时间,再将他们整理到一起:
①Java 遍历 原理 代码示例
②Java 遍历 增删 代码示例
③map上的几种遍历一
④map上的几种遍历二