Loading

如何实现List 集合去重?

3种实现思路:

1.自定义方法去重,通过循环判断当前的元素是否存在多个,如果存在多个,则删除此重复项,循环整个集合最终得到的就是一个没有重复元素的List

(1)首先我们可以创建一个新的集合,通过循环原集合判断循环的元素,是否存在于新集合,如果不存在就插入,存在了就忽略,这样循环玩,这样循环完了,最终新的集合就是没有重复元素的集合。

import lombok.Data;

import java.util.ArrayList;
import java.util.List;

public class DistinctExample {
public static void main(String[] args) {
// 创建并给 List 赋值
List<Person> list = new ArrayList<>();
list.add(new Person("李四", "123456", 20));
list.add(new Person("张三", "123456", 18));
list.add(new Person("王五", "123456", 22));
list.add(new Person("张三", "123456", 18));
// 去重操作
List<Person> newList = new ArrayList<>(list.size());
list.forEach(i -> {
if (!newList.contains(i)) { // 如果新集合中不存在则插入newList.add(i);
}
});
// 打印集合newList.forEach(p -> System.out.println(p));
}
}

@Data
class Person {
private String name;
private String password;
private int age;

public Person(String name, String password, int age) {
this.name = name;
this.password = password;
this.age = age;
}
}

(2)使用迭代器循环并且判断当前元素首次出现的位置(indexOf)是否等于最后出现的位置(IastIndexOf),如果不等于则说明此元素为重复元素,最终就能得到一个没有重复元素的集合。

import lombok.Data;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class DistinctExample {
public static void main(String[] args) {
// 创建并给 List 赋值
List<Person> list = new ArrayList<>();
list.add(new Person("李四", "123456", 20));
list.add(new Person("张三", "123456", 18));
list.add(new Person("王五", "123456", 22));
list.add(new Person("张三", "123456", 18));
// 去重操作
Iterator<Person> iterator = list.iterator();
while (iterator.hasNext()) {
// 获取循环的值
Person item = iterator.next();
// 如果存在两个相同的值if (list.indexOf(item) != list.lastIndexOf(item)) {
// 移除相同的值
iterator.remove();
}
}
// 打印集合信息
list.forEach(p -> System.out.println(p));
}
}

@Data
class Person {
private String name;
private String password;
private int age;

public Person(String name, String password, int age) {
this.name = name;
this.password = password;
this.age = age;
}
}

 

2.利用HashSet去重

    List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("a");
list.add("b");
//利用HashSet去重
//利用List中的元素创建HashSet集合,此时set中进行了去重操作
HashSet set = new HashSet(list);
//清空list集合
list.clear();
//将去重后的元素重新添加到list中
list.addAll(set);

HashSet 去重之后,元素的先后顺序也发生了改变
Set集合依靠自带的去重特性,可以很方便的实现去重功能,并且可以用LinkedHastSet再去重的同时又保证了元素所在的位置不被更改




2.通过List的contains()方法去重

     // 创建一个新的list集合,用于存储去重后的元素
             List listTemp = new ArrayList();
    // 遍历list集合
          for (int i = 0; i < list.size(); i++) {
   // 判断listTemp集合中是否包含list中的元素
          if (!listTemp.contains(list.get(i))) {
   // 将未包含的元素添加进listTemp集合中
         listTemp.add(list.get(i));
        }
    }

 

posted @ 2022-03-13 11:06  远乡人  阅读(861)  评论(0编辑  收藏  举报