【Java 基础】 Arrays 类常用方法

Arrays 类位于 java.util 包中, 是 Java 集合框架的一部分。 Arrays 类提供了静态方法,可以对数组进行动态的创建和访问。

类的层次结构:

java.lang.Object
↳ java.util.Arrays

Arrays 类中的常用方法

Arrays 类中的静态方法可以用来对数组进行赋值,排序,搜索等。

1. List<T> asList(T... a):

注意:该静态方法返回的是 Arrays 的内部静态类 ArrayList ,该类继承的是 AbstractList 类,只重写了部分方法,具体细节可以查看源码

Integer[] intArr = {10, 20, 15, 22, 35};

List<Integer> list = Arrays.asList(intArr);
2. binarySearch()

注意:该方法调用前数组必须是已排序的,并且要查找元素在数组内唯一,否则结果可能不准确

如果找到指定元素,返回其索引值,否则返回一个负数

Integer[] intArr = {1, 3, 5, 7, 9};

// 在整个数组内查找元素
System.out.println(Arrays.binarySearch(intArr, 3)); // 1
// 在指定区间内查找元素
System.out.println(Arrays.binarySearch(intArr, 2, 4, 4)); // -3
3. T[] copyOf(T[] original, int newLength)

拷贝数组,从下标 0 开始拷贝 newLength 个元素,如果超过原数组长度,会用数组类型的默认值进行填充,其底层调用了 System.arraycopy() 方法

int[] ints = {1, 3, 5};
Integer[] integers = {1, 3, 5};

int[] newInts = Arrays.copyOf(ints, 5);
Integer[] newIntegers = Arrays.copyOf(integers, 5);
        
// [1, 3, 5, 0, 0]
System.out.println(Arrays.toString(newInts));
// [1, 3, 5, null, null]
System.out.println(Arrays.toString(newIntegers));
4. T[] copyOfRange(T[] original, int from, int to)

拷贝数组,从索引 form 开始, 到索引 to - 1 结束,如果超出原数组范围,会用数组类型的默认值进行填充,其底层调用了 System.arraycopy() 方法

int[] ints = {1, 3, 5};

int[] newInts1 = Arrays.copyOfRange(ints, 1, 1);
int[] newInts2 = Arrays.copyOfRange(ints, 1, 5);

// []
System.out.println(Arrays.toString(newInts1));
// [3, 5, 0, 0]
System.out.println(Arrays.toString(newInts2));
5. boolean equals()

比较两个数组是否相等,如果两个数组以相同顺序包含相同元素,则返回true,否则返回false。

// false
System.out.println(Arrays.equals(new int[]{1, 2}, new int[]{1, 3}));
// true
System.out.println(Arrays.equals(new int[]{1, 2}, new int[]{1, 2}));
6. boolean deepEquals(Object[] a1, Object[] a2)

比较两个数组是否相等,如果两个数组以相同顺序包含相同元素,则返回true,否则返回false。

但是和 equals() 方法不同的是,deepEquals() 比较的是两个 Object 类型的数组,不能比较其他类型的数组。

Object[] objects1 = new Object[]{"1", "2", "3"};
Object[] objects2 = new Object[]{"1", "2", "3"};

// true
System.out.println(Arrays.deepEquals(objects1, objects2));
7. sort()

对数组进行从小到大排序,默认字典序排序(ASCII)

public static void main(String[] args) {
        Integer[] ints = {1, 3, 2};
        String[] strings = {"a", "b", "A", "B"};

        // [1, 2, 3]
        Arrays.sort(ints);
        // [3, 2, 1]
        Arrays.sort(ints, Collections.reverseOrder());
        // [A, B, a, b]
        Arrays.sort(strings);
        // [a, A, b, B]
        Arrays.sort(strings, String.CASE_INSENSITIVE_ORDER);
        // [b, a, B, A]
        Arrays.sort(strings, Collections.reverseOrder());
        Integer[] integers = {1, 3, 2};
        // 注意要想自定义排序规则,必须使用基本类型的包装类
        // 底层使用的是compareTo
        // 下面这个可用Collections.reverseOrder()替代
        // [3, 2, 1]
        Arrays.sort(integers, (a, b) -> {
            if (a < b) {
                return 1;
            } else if (a > b) {
                return -1;
            } else return 0;
        });
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值