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