目录

裴先生
裴先生
发布于 2021-01-10 / 4 阅读
0
0

Java 数组操作详解:复制、比较、排序与查找

原创

1. 复制数组

System.arraycopy() 方法

参数说明

  • 源数组:要复制的原始数组
  • 源数组起始偏移量:从源数组哪个索引开始复制
  • 目标数组起始偏移量:从目标数组哪个索引开始粘贴
  • 复制元素个数:需要复制的元素数量

重要提示:此方法不会执行自动装箱和拆箱,两个数组必须是明确的相同类型。

示例代码

class CopyingArrays {
    public static void main(String[] args) {
        int[] arr1 = new int[5];
        int[] arr2 = new int[8];
        Arrays.fill(arr1, 11); // 填充数组1
        Arrays.fill(arr2, 22); // 填充数组2
        System.out.println("arr1 = " + Arrays.toString(arr1));
        System.out.println("arr2 = " + Arrays.toString(arr2));

        System.arraycopy(arr1, 0, arr2, 0, arr1.length);
        System.out.println("arr2 = " + Arrays.toString(arr2));
        
        int[] arr3 = new int[3];
        System.out.println("arr3 = " + Arrays.toString(arr3));
        System.arraycopy(arr2, 0, arr3, 0, arr3.length);
        System.out.println("arr3 = " + Arrays.toString(arr3));
    }
}

输出结果

arr1 = [11, 11, 11, 11, 11]
arr2 = [22, 22, 22, 22, 22, 22, 22, 22]
arr2 = [11, 11, 11, 11, 11, 22, 22, 22]
arr3 = [0, 0, 0]
arr3 = [11, 11, 11]

2. 数组的比较

Arrays.equals() 方法

数组相等条件

  • 元素个数必须相等
  • 对应位置的元素必须相等

3. 数组排序

Arrays.sort() 方法

两种排序方式

  1. 实现 Comparable 接口

    Arrays.sort(arr1); // 对象需实现Comparable接口
    
  2. 使用自定义 Comparator 比较器

    Arrays.sort(arr1, 比较器); // 提供自定义比较逻辑
    

完整示例

class CompType implements Comparable<CompType> {
    private int title;
    private int name;

    // 构造函数、getter、setter 省略...
    
    @Override
    public String toString() {
        return "CompType{" +
                "title=" + title +
                ", name=" + name +
                '}';
    }

    @Override
    public int compareTo(CompType o) {
        return Integer.compare(o.title, title); // DESC降序
    }

    public static void main(String[] args) {
        CompType[] compTypes = {
                new CompType(2, 4),
                new CompType(1, 29),
                new CompType(4, 2),
                new CompType(48, 1)
        };
        
        System.out.println("Before sort:" + Arrays.toString(compTypes));
        Arrays.sort(compTypes); // 实现Comparable接口
        System.out.println("After Comparable sort:" + Arrays.toString(compTypes));

        Arrays.sort(compTypes, Comparator.comparingInt(o -> o.name)); // ASC升序,按name
        System.out.println("After Comparator sort:" + Arrays.toString(compTypes));

        System.out.println("binarySearch:" + Arrays.binarySearch(compTypes, 
            new CompType(2, 4), Comparator.comparingInt(o -> o.name)));
    }
}

输出结果

Before sort:[CompType{title=2, name=4}, CompType{title=1, name=29}, CompType{title=4, name=2}, CompType{title=48, name=1}]
After sort:[CompType{title=48, name=1}, CompType{title=4, name=2}, CompType{title=2, name=4}, CompType{title=1, name=29}]
After Comparator sort:[CompType{title=48, name=1}, CompType{title=4, name=2}, CompType{title=2, name=4}, CompType{title=1, name=29}]
binarySearch:2

4. 在已排序的数组中查找

Arrays.binarySearch() 方法

重要前提:数组必须已经排好序,否则结果不可预测。

使用场景

  • 在已排序数组中快速查找元素
  • 支持自定义 Comparator 进行查找
  • 时间复杂度为 O(log n)

原创

版权声明:本博客原创文章,由 裴先生 2021年01月10日 发表。
转载说明:除特殊说明外本站文章皆由 CC BY-NC-SA 4.0 协议发布,转载须注明出处。


评论