2025-03-29 17:32

整型数组数据去重方法

码自答

Java后端

(18)

(0)

收藏

整型数组中间的数据去重的方法:

可以通过Stream流中间的distinct方法去重,也可以利用Set集合中间的数据不能重复的特性去重

1    暴力去重

        数组中间的每个元素和之前的每个元素进行比较,如果不重复,将数组元素的值向前移动

        这种方式只适合数据量比较少的情况

public static Integer[] removeSame(Integer[] data){
    int k = 1;
    for(int i=1;i<data.length;i++){
        int j = 0;
        for(j=k-1;j>=0;j--){
            if(data[i]==data[j]){
                break;
            }
        }
        if(j==-1)
        {
            data[k] = data[i];
            k++;
        }
    }

    return Arrays.copyOf(data,k);
}


2    利用Stream流的distinct方法去重

public static Integer[] removeSame(Integer[] data){
    data = Arrays.stream(data).distinct().toArray(Integer[]::new);
    return data;
}


3    排序去重

        将数组的数据先排序,然后相邻的数如果重复,向前移动

public static Integer[] removeSame(Integer[] data){
    Arrays.sort(data);

    int k = 0;
    for (int i = 1; i < data.length; i++) {
        if(data[k] != data[i]){
            k++;
            data[k] = data[i];
        }
    }

    Integer[] newData = Arrays.copyOf(data, k+1);
    return newData;
}


4    新数组

        将不重复的元素复制到新的数组,每次往新数组复制之前,判断数据是否重复

public static Integer[] removeSame(Integer[] data) {
    List<Integer> list = new ArrayList<Integer>();
    list.add(data[0]);

    for (int i = 1; i < data.length; i++) {
        if(!list.contains(data[i]))
        {
            list.add(data[i]);
        }
    }

    Integer[] newData = list.toArray(new Integer[list.size()]);
    return newData;
}


5    Set集合去重

        利用Set集合中间的数据不能重复的特性

        将数组中间的数据依次复制到Set集合中间,Set集合自动排序,自动去重

//HashSet
//Set集合中间的数据不能重复
public static Integer[] removeSame(Integer[] data)
{
    Set<Integer> set = new HashSet<Integer>();
    for (Integer item : data) {
        set.add(item);
    }

    Integer[] newData = set.stream().toArray(Integer[]::new);
    return newData;
}


0条评论

点击登录参与评论