java数组中可能会犯的错和Arrays中的一些常用方法

本文介绍了Java中数组的拷贝、排序以及多维数组的使用。通过Arrays.copyOf实现数组深拷贝,避免引用传递导致的数据修改。利用Arrays.sort进行快速排序,演示了抽奖游戏的随机数组组合。在多维数组部分,强调了foreach循环处理二维数组的注意事项,并推荐使用Arrays.deepToString打印二维数组内容。
摘要由CSDN通过智能技术生成

数组

1.数组的拷贝

   	    int[] arr = new int[10];
        int[] ass = arr;
        ass[5] = 12;
        System.out.println(arr[5]); // 结果为 12

在此代码中,这两个变量实际上是共用同一个数组。这也是萌新可能会犯的误区。

如果喜欢将数组拷贝到一个新的数组中需要使用 Arrays中的 copyOf方法

        int[] arr = {1,2,3,4,5,6};
        int[] ass = Arrays.copyOf(arr,arr.length);
        ass[2] = 100;
        System.out.println(Arrays.toString(arr)); //[1, 2, 3, 4, 5, 6]
        System.out.println(Arrays.toString(ass)); //[1, 2, 100, 4, 5, 6]

如果元素是数值型,那么额外的元素将被赋值为0,boolean为false。小于原始长度将只拷贝前面的值

2.数组排序

轻松简明的方法,使用Arrays类中的sort方法

        int[] a = {2,1,100,3,9,0,1};
        Arrays.sort(a);
        System.out.println(Arrays.toString(a)); //[0, 1, 1, 2, 3, 9, 100]

这个方法使用了优化的快速排序算法。

以下是一个抽奖游戏中随机数组组合

    	Scanner sc = new Scanner(System.in);
        System.out.println("抽取多少个数");
        int k = sc.nextInt();

        System.out.println("一共有多少数");
        int n = sc.nextInt();

        int[] arr = new int[n];
        for (int i = 0; i < arr.length; i++) {
            arr[i] = i + 1;
        }

        int[] ass = new int[k];
        for (int i = 0; i < ass.length; i++) {
            int r = (int) (Math.random()*n);    //random方法,参数一个0到1的随机数

            ass[i] = arr[r];

            n--;
        }
        Arrays.sort(ass);

        for (int i : ass) {
            System.out.println(i);
        }

API: java.util.Arrays

	toString(元素类型[] a)方法 //返回包含a中元素的一个字符串,其中还包含一对中括号,并含有逗号分隔
        
    copOf(元素类型[] a,int end) //返回一个于a相同的一个数组,其长度为end。end如果大于a.langth(),结果会被0或者false填充
        
    copOfRange(元素类型[] a,int 起始,int 终点)  //和上面的类似,不过是截取其中的一段	: [) 
    sort(元素类型[] a)    //快速排序(升序)
        
    int binarySearch(元素类型[] a, 元素类型 v)  使用二分法查找值v,如果找到则返回相应的下标,否则返回一个负数值r,
    int binarySearch(元素类型[] a,int 起始,int 终点,元素类型 v)
        
    fill(元素类型[] a, 元素类型 v) //把所有元素都设置成v
        
    boolean equals(元素类型[] a,元素类型[] b)  //比较数组大小,下标,元素都对应相等:返回 true 

3.多维数组

//创建一个二维数组

int[][] arr;

多维数组的注意事项:

在for each循环中变量语句不能自动处理二维数组中的每一个元素。它会循环处理行,而这些行本身就是一维数组。要想访问所有元素需要使用两个嵌套循环

        int[][] arr = new int[2][2];

        for (int[] ints : arr) {
            for (int anInt : ints) {
                System.out.println(anInt);
            }
        }
//打印结果:0  0  0  0
   for (int[] ints : arr) {
            System.out.println(ints);
        }
//打印结果:[I@5b480cf9		[I@6f496d9f  //十六进制的哈希码值

提示:要想快速打印一个二维数组的数据元素列表可以调用Arrays类中的deepToString()方法

System.out.ptintln(Arrays.deepToString(arr))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值