【JavaSE】Arrays工具类

前言:上一篇文章中我们学习了数组,今天我们来说说针对数组操作的工具类 Arrays 部分方法的使用方法。


1. 对数组进行打印

1. Arrays.toString()打印一维数组

在这里插入图片描述根据上面可以看到,我们需要在 toString() 方法传入一个数组,它会把这个数组中的元素以字符串的形式返回。

import java.util.Arrays;
public class Main {
	public static void main(String[] args) {
		int[] array = {1, 3, 8, 2};
		String ret = Arrays.toString(array);
		System.out.println(ret);
	}
}

在这里插入图片描述

注意:使用 Arrays 工具类时需要加上 import java.util.Arrays; 原因是使用库的工具类时需要说明,即导入Arrays。

接下来我们也可以来模拟一下 toString() 的实现,练一练手。


public class Main {
    public static String myToString(int[] array) {
        String str = "[";
        for (int i = 0; i < array.length; i++) {
            str += array[i];
            if (i != array.length - 1) {
                str += ",";
            }
        }
        str += "]";
        return str;
    }
    public static void main(String[] args){
        int[] array = {1, 2, 3, 4, 5};
        String ret  = myToString(array);
        System.out.println(ret);
    }
}

2. Arrays.deepToString()打印二维数组

和 toString()方法一样它也是返回一个字符串

import java.util.Arrays;
public class Main {
    public static void main(String[] args) {
        int[][] array = {{1, 2, 3}, {6, 2, 6}};
        System.out.println(Arrays.deepToString(array));
    }
}

在这里插入图片描述

2. 实现数组的拷贝


1. 使用for循环

public class Main {
    public static void main1(String[] args) {
        int[] array1 = {1, 2, 3, 4};
        int[] copy = new int[array1.length];
        for (int i = 0; i < array1.length; i++) {
            copy[i] = array1[i];
        }
        System.out.println(Arrays.toString(copy));
    }
}

2. Arrays.copyOf()

当我们想要拷贝一个数组时,可以使用 for 循环进行拷贝,也可以使用Arrays.copyOf()。
在这里插入图片描述copyOf() 这个方法需要我们传入两个参数,如上图说明,它会返回一个和你要拷贝的数组一样的数组类型。

import java.util.Arrays;
public class Main {
    public static void main(String[] args) {
        int[] array = {1, 3, 8, 2};
        int[] copy = Arrays.copyOf(array, array.length); 
        System.out.println("array=" + Arrays.toString(array));
        System.out.println("copy=" + Arrays.toString(copy));
    }
}

在这里插入图片描述当然我们也可以使用 Arrays.copyOf() 以达到数组的扩容

import java.util.Arrays;
public class Main {
    public static void main2(String[] args) {
        int array[] = {1, 2, 3, 4};
        //虽然是拷贝,但也可以用此实现扩容
        int[] copy = Arrays.copyOf(array, 2*array.length);
        System.out.println(Arrays.toString(copy));
    }
}

在这里插入图片描述

3. Arrays.copyOfRange() 部分拷贝

在这里插入图片描述注意:结束拷贝 int to 不包含此下标,即 [int from, int to)。

import java.util.Arrays;
public class Main {
    public static void main(String[] args) {
        int[] array = {1, 3, 8, 2};
        int[] copy = Arrays.copyOfRange(array, 1, 3); //从1下标拷贝到2下标处,左闭右开
        System.out.println("array=" + Arrays.toString(array));
        System.out.println("copy=" + Arrays.toString(copy));
    }
}

在这里插入图片描述也可以实现数组的扩容

import java.util.Arrays;
public class Main {
    public static void main(String[] args) {
        int[] array = {1, 3, 8, 2};
        int[] copy = Arrays.copyOfRange(array, 1, 5);
        System.out.println("array=" + Arrays.toString(array));
        System.out.println("copy=" + Arrays.toString(copy));
    }
}

在这里插入图片描述

4. 引用.clone() 实现

public class Main {
    public static void main(String[] args) {
        int[] array = {1, 3, 8, 2};
        int[] copy = array.clone();
        System.out.println("copy=" + Arrays.toString(copy));
    }
}

在这里插入图片描述当 array 引用调用 clone() 时,会使 array 所引用的对象产生一个和 array 地址不同的副本,然后传给copy。
在这里插入图片描述

3. Arrays.equals()的使用

Arrays.equals() 是比较两个数组中元素是否相同

在这里插入图片描述

import java.util.Arrays;
public class Main {
    public static void main(String[] args) {
        int[] array1 = {1, 3, 8, 2};
        int[] array2 = {1, 3, 8, 2};
        boolean ret = Arrays.equals(array1, array2);
        System.out.println(ret);
    }
}

在这里插入图片描述



4. Arrays.fill()的使用

Arrays.fill()的作用是对一个数组进行填充

在这里插入图片描述

1. 第一种方式

import java.util.Arrays;
public class Main {
    public static void main(String[] args) {
        int[] array1 = new int[10];
        Arrays.fill(array1, 1);//将array1中元素全部填充为1
        System.out.println("array1=" + Arrays.toString(array1));
    }
}

在这里插入图片描述


2. 第二种方式

import java.util.Arrays;
public class Main {
    public static void main(String[] args) {
        int[] array1 = new int[10];
        Arrays.fill(array1, 8, 10, 20);//8到9下标的元素变为20,和copyOfRange一样是左闭右开
        System.out.println("array1=" + Arrays.toString(array1));
    }
}

在这里插入图片描述
注意:数组不能越界不然会报错
在这里插入图片描述

5. 二分查找

5.1 Arrays.sort()

当我们想要使用二分查找时,数组必须是有序的,当数组没有有序时,可以采用 Arrays.sort() 进行升序排序,传入需要排序的数组即可。

/*
    2.二分查找,返回数组下标,使用二分查找数组必须有序的
 */
import java.util.Arrays;
public class Main2 {
    public static int binarySearch(int[] array,int key) {
        int left = 0;
        int right = array.length - 1;
        while (left <= right) {
            int mid = (left+right) / 2;
            if (key > array[mid]) {
                left = mid + 1;
            } else if (key < array[mid]) {
                right = mid - 1;
            } else if (key == array[mid]) {
                return mid;
            }
        }
        return -1;//数组没有负数,返回负数代表数组没有这个数
    }
    public static void main(String[] args) {
        int key = 15;
        int[] array = {1, 3, 8, 9, 11, 33, 15};
        Arrays.sort(array);
        int ret = binarySearch(array,key);
        if (ret == -1) {
            System.out.println("找不到此数字");
        } else {
            System.out.println("找到了,下标为" + ret);
        }
    }
}

在这里插入图片描述1、sort方法默认是升序排序
2、对于我现在的简单数据类型能不能采用降序排序,做不到。
3、怎么样可以做到指定的升序或者降序,我们需要继续向后学习。



5.2 Arrays.binarySearch()

当然我们也可以使用 Arrays.binarySearch() 实现二分查找
在这里插入图片描述

使用 Arrays.binarySearch() 返回的是一个整型:

  1. 当在数组中找到与 key 相同的元素时,返回该元素的下标。
  2. 当在数组中找不到与 key 相同的元素时, 返回该数组最后一个下标加一的负值。
    例如:int[] array = {1, 2, 3, 4}; 当找不到与 key 相同的元素时,return -(3 + 1)。

如下图是 java 实现 binarySearch() 方法时的源代码
在这里插入图片描述

import java.util.Arrays;
public class TestDemo3 {
        public static void main(String[] args) {
            int key = 11;
            int[] array = {1, 3, 8, 9, 11, 15, 33};
            int index = Arrays.binarySearch(array,key);
            if (index < 0) { //返回的是下标无负数
                System.out.println("找不到此数字");
            } else {
                System.out.println("找到了,下标为" + index);
            }
        }
}

好了本篇文章就到这里了,如发现有错误,请各位大佬及时指出。

  • 16
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 12
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

没完没了的麦当

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值