java List怎么去重
时间: 2025-06-28 15:16:39 浏览: 0
### Java中List去重的方法
#### 使用`Iterator`遍历并删除重复项
一种方式是通过迭代器遍历列表,并利用临时列表存储不重复的元素。对于每一个新访问到的元素,先检查它是否已经存在于临时列表中;如果存在则从原列表中移除该元素。
```java
public void testList() {
List<Integer> list = new ArrayList<>();
list.add(7);
list.add(8);
list.add(2);
list.add(7);
list.add(8);
list.add(8);
list.add(100);
List<Integer> listTemp = new ArrayList<>();
Iterator<Integer> it = list.iterator();
while (it.hasNext()){
Integer a = it.next();
if (listTemp.contains(a)){
it.remove();
} else{
listTemp.add(a);
}
}
for(Integer i : list){
System.out.println(i);
}
}
```
这种方法可以保持原有数据结构不变的同时完成去重工作[^1]。
#### 利用`LinkedHashSet`特性去除重复条目
另一种更为简洁高效的方式就是借助于`Set`集合的特点——不允许有相同的元素。具体来说,可以通过将所有的元素放入一个`LinkedHashSet`实例里来自动过滤掉那些多余的副本。由于`LinkedHashSet`能够记住插入顺序,因此最终得到的新列表仍然保持着原有的排列次序。
```java
import java.util.*;
public class DuplicateCheckerWithLinkedHashSet {
public static boolean hasDuplicates(List<?> list) {
Set<Object> seen = new LinkedHashSet<>();
for (Object item : list) {
if (!seen.add(item)) {
return true;
}
}
return false;
}
public static void main(String[] args) {
// 示例代码省略...
}
}
```
此法不仅简单明了而且性能较好,适用于大多数情况下的快速去重需求[^2]。
#### 基于流的操作实现按属性去重
当面对更加复杂的业务逻辑时,可能需要按照某些特定条件来进行筛选。例如,在一组实体类组成的列表中依据某个字段值唯一性来做判断。此时就可以采用Java 8引入的Stream API配合Lambda表达式轻松达成目标:
```java
import java.util.*;
import java.util.stream.Collectors;
class Person {
private String id;
// getter setter ...
}
// ...
List<Person> l = Arrays.asList(/* ... */);
l.stream()
.collect(Collectors.toMap(
Person::getId,
Function.identity(),
(a, b) -> a))
.values()
.stream()
.collect(Collectors.toList());
```
上述代码片段展示了如何基于对象内部的一个成员变量(这里是ID)执行精确匹配从而达到去重的效果。值得注意的是,这里选择了保留首次出现的对象记录而舍弃之后相同键对应的其他实例[^3]。
#### 总结
以上介绍了几种不同的策略用来解决Java编程语言里的List类型的去重问题。每种方案都有其适用范围以及优缺点所在,开发者可以根据实际情况灵活选用最合适的工具解决问题。
阅读全文
相关推荐










