Java中Arrays Api使用

Arrays APi

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

准备

创建一个整数数组:
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,还可以在生成流之后对该流进行一系列的操作,强烈推荐这种方式

待续。。。

上一篇:快乐数_数组_简答


下一篇:接口测试平台代码实现82: 多接口用例-22