高级架构师带你学费它!Java中Arrays Api的使用!

在这里插入图片描述

在日常使用Java数组的过程中,会经常使用到一些扩容排序搜索等操作。

Arrays APi

准备

创建一个整数数组:
int[] ints = new int[]{3,4,2,3,5,6,1,5};

排序
Arrays.sort(ints);  // 内部排序
System.out.println(Arrays.toString(ints));  //[1, 2, 3, 3, 4, 5, 5, 6]

复制
ints = Arrays.copyOf(ints, ints.length + 1);  // 扩容
ints[ints.length - 1] = 7;
System.out.println("Arrays.toString(ints) = " + Arrays.toString(ints)); // [1, 2, 3, 3, 4, 5, 5, 6, 7],增加了容量

二分搜索

存在则返回随机一个索引,不存在则返回搜索结果的low指针对应的下标 + 1后的负值。源码如下:

private static int binarySearch0(int[] a, int fromIndex, int toIndex,
                                     int key) {
        int low = fromIndex;
        int high = toIndex - 1;  // toIndex不包含在搜索内容中

        while (low <= high) {
            int mid = (low + high) >>> 1;
            int midVal = a[mid];

            if (midVal < key)
                low = mid + 1;
            else if (midVal > key)
                high = mid - 1;
            else
                return mid; // key found
        }
        return -(low + 1);  // key not found.
    }

使用代码:

System.out.println("Arrays.binarySearch(ints, 2) = " + Arrays.binarySearch(ints, 2)); // Arrays.binarySearch(ints, 2) = 1
int i = Arrays.binarySearch(ints, 8); // 没找到 -(low + 1);
System.out.println(i); // 返回 -(9 + 1)= -10;

填充默认值

在某些场景下,我们希望数组的初始值可以自定义,所以可以使用 fill 函数去实现,注意,只能对一维数组进行操作,如果是二维数组,那么把它当作数组的元素是数组,使用一层循环,然后对每个数组进行填充自定义的值。

Arrays.fill(ints2, 2); // 填充默认值
System.out.println("Arrays.toString(ints2) = " + Arrays.toString(ints2));

比较两个数组是否相等

不能直接用等于,也可以使用数组自带的equals方法,但推荐使用 Arrays.equals()方法可以自行比较。

int[] ints2 = new int[]{1,2,3};
        System.out.println("Arrays.equals(ints, ints2) = " + Arrays.equals(ints, ints2));  // false, 判断两个数组是否相等。

将数组转换为List

第一种方式
List<Integer> integers = Arrays.asList(1, 2, 3, 4);

这种方式虽然可以使用,但是生成的List为内部类,而不是java.utils下的ArrayList,不能对该list进行添加,删除等操作。

第二种方式
List<Integer> collect = Arrays.stream(ints).boxed().collect(Collectors.toList());

这种方式生成的就是正常的List,还可以在生成流之后对该流进行一系列的操作,强烈推荐这种方式

分类: [Java]

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值