java中遍历数组的三种方法
方法一:for循环进行下标遍历
int[] array = {1,2,3,4,5,6,7,8,9,0};
for(int i = 0;i < array.length;i++){
System.out.print(array[i] + " ");
}
//输出结果
//1 2 3 4 5 6 7 8 9 0
方法二:增强for循环遍历数组
//语法 for(元素类型 标识符 : 需要遍历的对象){}
int[] array = {1,2,3,4,5,6,7,8,9,0};
for(int element : array){
System.out.print(element + " ");
}
//输出结果
//1 2 3 4 5 6 7 8 9 0
//如果想在遍历的同时修改元素
for(int element : array){
element = 10;
System.out.print(element + " ");
}
//输出结果,结果确实变了,但是原数组真的发生改变了吗?
//10 10 10 10 10 10 10 10 10 10
//但是再次输出遍历原数组会发现原数组的元素的值并未发生变化
for(int element : array){
System.out.print(element + " ");
}
//输出结果
//1 2 3 4 5 6 7 8 9 0
这两种方法的对比:
方法 | 优点 | 缺点 |
---|---|---|
for循环 | 1.可以获取元素下标; 2.在遍历的同时可以修改元素 ; 3.遍历数组、基于数组结构的ArrayLisr集合的效率高于增强for循环 | 1.遍历基于链表结构的LinkedList集合的效率不及增强for循环 |
增强for循环 | 1.遍历基于链表结构的LinkedList集合的效率优于for循环; | 1.遍历的同时修改元素不会影响到原数组; 2.不能获取元素的下标; 3.遍历数组、基于数组结构的ArrayLisr集合的效率低于for循环 |
方法三:Arrays工具类中的静态方法toString()
int[] array = {1,2,3,4,5,6,7,8,9,0};
//将数组转化成字符串的形式,该方法的返回值是一个字符串
java.util.Arrays。toString(array);
//也可以通过导包(import java.util.Arrays;)的方式写成如下的代码
Arrays.toString(array);//[1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
下面分别就普通for循环和增强for循环遍历数组、遍历LinkedList集合、遍历ArrayList集合的耗时进行对比:
①遍历长度为100000的数组
//长度为100000的数组
int[] array = new int[100000];
//------增强for循环遍历-----------------
long time0 = System.currentTimeMillis();
for(int element : array){
System.out.print(element);
}
long time1 = System.currentTimeMillis();
System.out.println();
System.out.println(time1 - time0); // 423毫秒
//------普通for循环遍历-----------------
for (int i = 0; i < array.length; i++) {
System.out.print(array[i]);
}
long time2 = System.currentTimeMillis();
System.out.println();
System.out.println(time2 - time1); // 355毫秒
//====> 遍历数组普通for循环优于增强for循环
②遍历集合元素长度为100000的LinkedList集合
//准备一个含有100000个元素的LinkedList集合
LinkedList<Integer> array = new LinkedList<>();
for(int i = 0;i < 100000;i++){
array.add(i);
}
//------增强for循环遍历-----------------
long time0 = System.currentTimeMillis();
for(int element : array){
System.out.print(element);
}
long time1 = System.currentTimeMillis();
System.out.println();
System.out.println(time1 - time0); // 473毫秒
//------普通for循环遍历-----------------
for (int i = 0; i < array.size(); i++) {
System.out.print(array.get(i));
}
long time2 = System.currentTimeMillis();
System.out.println();
System.out.println(time2 - time1); // 7957毫秒
//====> 遍历LinkedList集合增强for循环优于普通for循环
③遍历集合元素长度为100000的ArrayList集合
ArrayList<Integer> array = new ArrayList<>();
for(int i = 0;i < 100000;i++){
array.add(i);
}
//------增强for循环遍历-----------------
long time0 = System.currentTimeMillis();
for(int element : array){
System.out.print(element);
}
long time1 = System.currentTimeMillis();
System.out.println();
System.out.println(time1 - time0); // 449毫秒
//------普通for循环遍历-----------------
for (int i = 0; i < array.size(); i++) {
System.out.print(array.get(i));
}
long time2 = System.currentTimeMillis();
System.out.println();
System.out.println(time2 - time1); // 382毫秒
//====> 遍历ArratList集合普通for循环优于增强for循环
对于结果可以多运行几次,看看效果