整型数组中间的数据去重的方法:
可以通过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条评论
点击登录参与评论