java中数组遍历的三种方式
Posted 胡毛毛_三月
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中数组遍历的三种方式相关的知识,希望对你有一定的参考价值。
使用显示数组 for,for-each,和toString
题目描述
给一个数组:
int Arr[][]=5,7,15,8,4,11,3,6,13;
使用显示数组 for,for-each,和toString
1.for循环遍历
通常遍历数组都是使用for循环来实现。遍历一维数组很简单,遍历二维数组需要使用双层for循环,通过数组的length属性可获得数组的长度。
程序:
package 数组;
public class for遍历二维数组
public static void main(String[] args)
// TODO Auto-generated method stub
int Arr[][]=5,7,15,8,4,11,3,6,13;
for (int i = 0; i < Arr.length; i++)
for (int j = 0; j < Arr[i].length; j++)
System.out.print(Arr[i][j]+" ");
运行结果:
5 7 15 8 4 11 3 6 13
for循环本质就是把数组中的每个数据打印出来。
2.foreach语句遍历
遍历数组就是获取数组的每个元素。通常遍历数组都是使用for循环来实现的,但是for循环不够简洁,下面我们简要介绍一下使用foreach语句来实现遍历数组的方法。
java5之后,Java提供了一种更简洁的循环:foreach循环,这种循环遍历数组和集合更加简洁。使用foreach循环遍历数组时,无须获得数组和集合长度,无须根据索(下标)引来访问数组元素,foreach循环自动遍历数组和集合的每一个元素。
语法格式:
for(type element: array)
System.out.println(element);
注:
foreach 语句为数组或对象集合中的每个元素重复一个嵌入语句组。foreach 语句用于循环访问集合以获取所需信息,但不应用于更改集合内容以避免产生不可预知的副作用。
因此不要对foreach的循环变量赋值。
例如:
public static void main(String [] args)
int [] arr=1,2,3,4,5;
for(int a:arr)
a=0;
System.out.print(a);
System.out.print(“\\n”+a[0]);
运行结果:
00000
1
从上面结果可以看出,由于在foreach循环中对数组进行赋值,结果导致不能正确遍历数组元素。而且当再次访问第一个数组元素时,发现数组元素依然没有改变。
程序:
package 数组;
public class foreach遍历二维数组
public static void main(String[] args)
// TODO Auto-generated method stub
int Arr[][]= 5,7,15,8,4,11,3,6,13;
System.out.println("数组中的元素是 ");
int i=0;
for(int x[]: Arr) //行
i++;
int j=0;
for(int e:x) //列
j++;
if(i==Arr.length&&j==x.length)
System.out.print(e);//输出最后一个元素,后面不加逗号
else
System.out.print(e+"、");
运行结果:
数组中的元素是
5、7、15、8、4、11、3、6、13
3.Arrays工具类中toString静态方法遍历
利用Arrays工具类中的toString静态方法可以将一维数组转化为字符串形式并输出。
已知打印一维数组的API为System.out.println ( Arrays.toString ();,其参数为数组名或数组指针,其支持的数据类型有很多,如:int[]、char[]、byte[]等。
3.1.程序:
package 数组;
import java.util.Arrays;
public class toString遍历二维数组
public static void main(String[] args)
// TODO Auto-generated method stub
int Arr[][]=5,7,15,8,4,11,3,6,13;
System.out.println("Arr:"+Arrays.toString(Arr));
int b[][]=5,7,15,8,4,11,3,6,13;
System.out.println("Arr:"+Arrays.deepToString(b));
运行结果:
Arr:[[I@15db9742, [I@6d06d69c, [I@7852e922]
Arr:[[5, 7, 15], [8, 4,11], [3, 6, 13]]
注释:
注: *Arr:[[I@15db9742, [I@6d06d69c, [I@7852e922]*
这种输出结果是因为:Arr是一个二维数组。相当于一个长度为3的数组,但是这个数组的元素还是是数组。
当执行Arrays.toString的时候相当于遍历数组,并且输出数组的元素,但是这个数组的元素是数组,所以这里输出的是数组元素的地址。
3.2.Arrays.deepToString()与Arrays.toString()的区别
- Arrays.deepToString()主要用于数组中还有数组的情况,而Arrays.toString()则相反,对于Arrays.toString()而言,当数组中有数组时,不会打印出数组中的内容,只会以地址的形式打印出来。
- 示例:
public class test
public static void main(String[] args)
int a[] = 1, 2, 3;
System.out.println(Arrays.toString(a));
int b[][] = 1, 2, 3, 4, 5, 6;
System.out.println(Arrays.toString(b));
System.out.println(Arrays.deepToString(b));
- 结果:
[1, 2, 3]
[[I@14ae5a5, [I@7f31245a]
[[1, 2, 3], [4, 5, 6]]
3.3.Arrays 类
java.util.Arrays 类能方便地操作数组,它提供的所有方法都是静态的。
具有以下功能:
- 给数组赋值:通过 fill 方法。
- 对数组排序:通过 sort 方法,按升序。
- 比较数组:通过 equals 方法比较数组中元素值是否相等。
- 查找数组元素:通过 binarySearch 方法能对排序好的数组进行二分查找法操作。
具体说明请查看下表:
序号 | 方法和说明 |
---|---|
1 | ***public static int binarySearch(Object[] a, Object key)***用二分查找算法在给定数组中搜索给定值的对象(Byte,Int,double等)。数组在调用前必须排序好的。如果查找值包含在数组中,则返回搜索键的索引;否则返回 (-(插入点) - 1)。 |
2 | ***public static boolean equals(long[] a, long[] a2)***如果两个指定的 long 型数组彼此相等,则返回 true。如果两个数组包含相同数量的元素,并且两个数组中的所有相应元素对都是相等的,则认为这两个数组是相等的。换句话说,如果两个数组以相同顺序包含相同的元素,则两个数组是相等的。同样的方法适用于所有的其他基本数据类型(Byte,short,Int等)。 |
3 | ***public static void fill(int[] a, int val)***将指定的 int 值分配给指定 int 型数组指定范围中的每个元素。同样的方法适用于所有的其他基本数据类型(Byte,short,Int等)。 |
4 | ***public static void sort(Object[] a)***对指定对象数组根据其元素的自然顺序进行升序排列。同样的方法适用于所有的其他基本数据类型(Byte,short,Int等)。 |
3.4. Java中对Array数组的常用操作
示例:
import java.util.*;
public class ArrayPrint
public static void main(String[] args)
//声明数组
String [] arr;
int arr1[];
//初始化数组
int arr2[]=new int[]1,2,3,4,5;
String[] array1="马超","马云","关羽","刘备","张飞";
String[] array2=new String[]"黄渤","张艺兴","孙红雷","小猪","牙哥","黄磊";
String[] array=new String[5];
//查看数组的长度
int length=array1.length;
System.out.println("length: "+array1.length);
//输出数组
System.out.println(array1); //结果:[Ljava.lang.String;@32f22097
System.out.println("arr2: "+Arrays.toString(arr2));
//遍历数组
for (int i = 0; i < array1.length; i++)
System.out.println(array1[i]);
//int数组转成string数组
int[] array3=1,2,3,4,5,6,7,8,9,0;
String arrStrings=Arrays.toString(array3);
System.out.println("arrStrings:"+arrStrings);
//从array中创建arraylist
ArrayList <String> arrayList=new ArrayList<String>(Arrays.asList(array1));
System.out.println("arrayList:"+arrayList);
//数组中是否包含某一个值
String a="马超";
if (Arrays.asList(array1).contains(a))
System.out.println("马超在这里");
//将数组转成set集合
Set<String> set=new HashSet<String>(Arrays.asList(array2));
System.out.println("set:"+set);
//将数组转成list集合
List<String> list_1=new ArrayList<String>();
for (int i = 0; i < array2.length; i++)
list_1.add(array2[i]);
System.out.println("list_1:"+list_1);
String[] arrStrings2="1","2","3";
List<String > list2=Arrays.asList(arrStrings2);
System.out.println("list2:"+list2);
//Arrays.fill()填充数组
int[] arr3=new int[5];
Arrays.fill(arr3, 10); //将数组全部填充10
System.out.println("arr3:"+arr3);
for (int i = 0; i < arr3.length; i++)
System.out.println("arr3[i]:"+arr3[i]);
//数组排序
int[] arr4 = 3, 7, 2, 1, 9;
Arrays.sort(arr4);
System.out.println("arr4:"+arr4);
for (int i = 0; i < arr4.length; i++)
System.out.println("arr4[i]:"+arr4[i]);
int[] arr5 = 3, 7, 2, 1, 9,3,45,7,8,8,3,2,65,34,5;
Arrays.sort(arr5, 1, 4); //从第几个到第几个之间的进行排序
for (int i = 0; i < arr5.length; i++)
System.out.println("arr5[i]:"+arr5[i]);
//复制数组
int[] arr6 = 3, 7, 2, 1;
int[] arr7=Arrays.copyOf(arr6, 10); //指定新数组的长度
int[] arr8=Arrays.copyOfRange(arr6, 1, 3); //只复制从索引[1]到索引[3]之间的元素(不包括索引[3]的元素)
for (int i = 0; i < arr8.length; i++)
System.out.println(arr8[i]);
//比较两个数组
int[] arr9 = 1, 2, 3, 4,5,6,7,8,9,0;
boolean arr10=Arrays.equals(arr6, arr9);
System.out.println(arr10);
//去重复
//利用set的特性
int[] arr11 = 1, 2, 3, 4,5,6,7,8,9,0,3,2,4,5,6,7,4,32,2,1,1,4,6,3;
Set<Integer> set2=new HashSet<Integer>();
for (int i = 0; i < arr11.length; i++)
set2.add(arr11[i]);
System.out.println(set2);
int[] arr12 = new int[set2.size()];
int j=0;
for (Integer i:set2)
arr12[j++]=i;
System.out.println(Arrays.toString(arr12));
打印结果:
打印结果:
length: 5
[Ljava.lang.String;@7852e922
arr2: [1, 2, 3, 4, 5]
马超
马云
关羽
刘备
张飞
arrStrings:[1, 2, 3, 4, 5, 6, 7, 数组的三种方式总结 多维数组的遍历及 Arrays类的常用方法总结