如何实现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));
}
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 我与微信审核的“相爱相杀”看个人小程序副业
· DeepSeek “源神”启动!「GitHub 热点速览」
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库