18. Java 数组操作

91 阅读3分钟

18. Java 数组操作

Java 中,数组操作非常强大且灵活。除了基本的数组复制方法,Java SE 还提供了 java.util.Arrays 类,帮助开发人员轻松执行常见的数组操作,如复制、排序、搜索等。以下是一些常用的方法和示例:

1. 复制数组copyOfRange()

java.util.Arrays.copyOfRange() 是一种非常方便的数组复制方法,它不仅可以复制整个数组,还可以指定复制的起始和结束范围。

示例:
class ArrayCopyOfDemo {
    public static void main(String[] args) {
        String[] copyFrom = {
            "Affogato", "Americano", "Cappuccino", "Corretto", "Cortado",
            "Doppio", "Espresso", "Frappucino", "Freddo", "Lungo", "Macchiato",
            "Marocchino", "Ristretto" };

        // 使用 copyOfRange 方法复制部分数组
        String[] copyTo = java.util.Arrays.copyOfRange(copyFrom, 2, 9);
        
        for (String coffee : copyTo) {
            System.out.print(coffee + " ");
        }
    }
}
输出:
Cappuccino Corretto Cortado Doppio Espresso Frappucino Freddo 
  • copyOfRange() 方法的第二个参数是起始索引(包含),第三个参数是结束索引(不包含)。
  • 该方法的优势在于不需要预先声明目标数组的大小,它会自动为你创建一个合适大小的新数组。

2. 数组排序sort()

java.util.Arrays.sort() 用于对数组进行升序排序。

示例:
class ArraySortDemo {
    public static void main(String[] args) {
        int[] numbers = { 5, 3, 8, 1, 4, 2 };
        
        // 对数组进行排序
        java.util.Arrays.sort(numbers);

        // 打印排序后的数组
        System.out.println(java.util.Arrays.toString(numbers));
    }
}
输出:
[1, 2, 3, 4, 5, 8]

3. 二分搜索binarySearch()

java.util.Arrays.binarySearch() 方法可以用来快速在已排序的数组中查找特定值的索引。注意,数组必须先排序。

示例:
class ArrayBinarySearchDemo {
    public static void main(String[] args) {
        int[] numbers = { 5, 3, 8, 1, 4, 2 };

        // 对数组进行排序
        java.util.Arrays.sort(numbers);

        // 使用二分搜索查找元素
        int index = java.util.Arrays.binarySearch(numbers, 4);

        System.out.println("Index of 4: " + index);
    }
}
输出:
Index of 4: 2

4. 填充数组fill()

java.util.Arrays.fill() 方法用于填充数组的每个元素,使用指定的值。

示例:
class ArrayFillDemo {
    public static void main(String[] args) {
        int[] numbers = new int[5];
        
        // 使用 7 填充数组
        java.util.Arrays.fill(numbers, 7);

        System.out.println(java.util.Arrays.toString(numbers));
    }
}
输出:
[7, 7, 7, 7, 7]

5. 数组比较equals()

java.util.Arrays.equals() 方法可以比较两个数组的内容是否相等(包括顺序和元素)。

示例:
class ArrayEqualsDemo {
    public static void main(String[] args) {
        int[] array1 = { 1, 2, 3, 4, 5 };
        int[] array2 = { 1, 2, 3, 4, 5 };
        int[] array3 = { 5, 4, 3, 2, 1 };

        // 比较数组是否相等
        System.out.println(java.util.Arrays.equals(array1, array2)); // true
        System.out.println(java.util.Arrays.equals(array1, array3)); // false
    }
}
输出:
true
false

6. 将数组转换为字符串toString()

java.util.Arrays.toString() 方法将数组转换为字符串形式,数组元素用逗号分隔,整个数组被括在方括号中。

示例:
class ArrayToStringDemo {
    public static void main(String[] args) {
        String[] copyTo = { "Cappuccino", "Corretto", "Cortado", "Doppio", "Espresso" };

        // 将数组转换为字符串
        System.out.println(java.util.Arrays.toString(copyTo));
    }
}
输出:
[Cappuccino, Corretto, Cortado, Doppio, Espresso]

7. 将数组转换为流stream()

Java 8 中,java.util.Arrays.stream() 方法被引入,允许你将数组转换为流对象,进而使用流操作(如 mapfilter 等)处理数组数据。

示例:
class ArrayStreamDemo {
    public static void main(String[] args) {
        String[] copyTo = { "Cappuccino", "Corretto", "Cortado", "Doppio", "Espresso" };

        // 将数组转换为流并打印每个元素
        java.util.Arrays.stream(copyTo)
            .map(coffee -> coffee + " ")
            .forEach(System.out::print);
    }
}
输出:
Cappuccino Corretto Cortado Doppio Espresso 

总结:

java.util.Arrays 类提供了非常丰富的数组操作方法,它们能够帮助你高效地完成常见的数组任务,比如复制、排序、搜索、比较等。通过这些工具,你可以大大简化代码,提高开发效率。在处理复杂的数组任务时,建议优先考虑使用这些内置方法,而不是自己编写手动操作逻辑。