java中数组遍历的三种方式

java中数组遍历的三种方式1.for循环遍历通常遍历数组都是使用for循环来实现。遍历一维数组很简单,遍历二维数组需要使用双层for循环,通过数组的length属性可获得数组的长度。2.Arrays工具类中toString静态方法遍历利用Arrays工具类中的toString静态方法可以将一维数组转化为字符串形式并输出。3.foreach语句遍历java5之后,Java提供了一种更简洁的循环:foreach循环,这种循环遍历数组和集合更加简洁。使用foreach循环遍历数组时,无须获得数组和集合长度,无须根据索引来访问数组

大家好,又见面了,我是你们的朋友全栈君。

题目描述

给一个数组:

 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 类能方便地操作数组,它提供的所有方法都是静态的。

具有以下功能:

  1. 给数组赋值:通过 fill 方法。
  2. 对数组排序:通过 sort 方法,按升序。
  3. 比较数组:通过 equals 方法比较数组中元素值是否相等。
  4. 查找数组元素:通过 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, 8, 9, 0]
arrayList:[马超, 马云, 关羽, 刘备, 张飞]
马超在这里
set:[小猪, 牙哥, 黄渤, 黄磊, 孙红雷, 张艺兴]
list_1:[黄渤, 张艺兴, 孙红雷, 小猪, 牙哥, 黄磊]
list2:[1, 2, 3]
arr3:[I@4e25154f
arr3[i]:10
arr3[i]:10
arr3[i]:10
arr3[i]:10
arr3[i]:10
arr4:[I@70dea4e
arr4[i]:1
arr4[i]:2
arr4[i]:3
arr4[i]:7
arr4[i]:9
arr5[i]:3
arr5[i]:1
arr5[i]:2
arr5[i]:7
arr5[i]:9
arr5[i]:3
arr5[i]:45
arr5[i]:7
arr5[i]:8
arr5[i]:8
arr5[i]:3
arr5[i]:2
arr5[i]:65
arr5[i]:34
arr5[i]:5
7
2
false
[0, 32, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 32, 1, 2, 3, 4, 5, 6, 7, 8, 9]


在这里插入图片描述

答疑资料qq群:1007576722

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/137225.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • SED Command

    SED Command

  • 信道容量计算公式_信道均衡算法

    信道容量计算公式_信道均衡算法信道带宽=符号率*符号数*(188/204)注释:符号率&lt–&gt频宽(下行欧标频宽8MHz,上行有1.6MHz,3.2MHz,6.4MHz三种频宽);符号数&lt–&gt调制方式(符号数=Log2~调制方式,如QAM64的符号数为6,2的6次方=64)=====================================================…

  • linux下安装mysql-5.7.25详细步骤

    linux下安装mysql-5.7.25详细步骤第一步:下载进入到mysql官网下载自己对应版本的mysql,下载地址:https://dev.mysql.com/downloads/mysql/5.7.html#downloads我这里下载mysql-5.7.25-linux-glibc2.12-x86_64.tar.gz版本也可以进入linux后用命令下载wgethttps://cdn.mysql.com/…

  • pcanywhere设置主控端_redis修改端口

    pcanywhere设置主控端_redis修改端口  有些防火墙只允许一个pcAnywhere被控端使用一个IP端口。而防火墙后面的其它pcAnywhere被控端必须使用另外的端口。希望知道如何更改这些端口。   更改pcAnywhereIP端口需要编辑Windows注册表。如果需要频繁的执行此操作,创建.reg文件是最安全也是最方便的更改方法。尤其对于那些可能需要连接_blank”>防火墙后多个被控端的主控端而

  • 应用程序中的服务器错误怎么解决_web服务器和http服务器

    应用程序中的服务器错误怎么解决_web服务器和http服务器在SEO工作的过程中,我们偶尔会遇到HTTP500内部服务器错误,这样的问题,它是一个明显的HTTP状态码,它在告知站长,你的网站与服务器某些配置一定出现问题。从SEO的角度,如果你不能够及时解决相关问题,那么你的网站会面临短期内与百度爬虫失去链接,时间长久的话,会严重影响网站的相关排名。那么,如何解决,HTTP500内部服务器错误?根据以往SEO网站诊断的经历,蝙蝠侠IT,将通过如下内容,进行浅…

  • war3辅助工具_魔兽世界修改器

    war3辅助工具_魔兽世界修改器War3tools魔兽工具完成于2012年5月,工具包含:版本转换,注册表修复,一键启动游戏,以及将网上好用的改建精灵内置其中。War3tools魔兽工具还可以将自己的工具或者魔兽对战平台加入启动项目,只需在我的工具中添加即可,操作简单,功能实用。希望War3tools魔兽工具能给您的游戏带来方便。@risingsun下载地址:http://pan.baidu.com/share/li

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号