Java - 两个 List 合并后去重 & 单个 List 去重

简介: Java - 两个 List 合并后去重 & 单个 List 去重

1、单个 List 去重

如果用的是 Set 集合就不用怕重复的问题了,如果用的 List 就要想办法将它变为 Set。

importjava.util.ArrayList;
importjava.util.HashSet;
importjava.util.List;
publicclassTest {
publicstaticvoidmain(String[] args) {
List<String>l1=newArrayList<String>();
l1.add("a");
l1.add("b");
l1.add("c");
l1.add("e");
l1.add("e");
l1.add("e");
l1.add("e");
l1.add("a");
List<String>listWithoutDup=newArrayList<String>(newHashSet<String>(l1));
for(Stringstr : listWithoutDup){
System.out.println(str);
        }
    }
}

2、两个集合合并后去重

importjava.util.ArrayList;
importjava.util.HashSet;
importjava.util.List;
publicclassTest {
publicstaticvoidmain(String[] args) {
List<String>l1=newArrayList<String>();
l1.add("a");
l1.add("a");
l1.add("c");
l1.add("c");
List<String>l2=newArrayList<String>();
l2.add("b");
l2.add("b");
l2.add("k");
l2.add("k");
l1.removeAll(l2);//此处指的是将与l2重复的删除l1.addAll(l2);//此处指加上l2// 如果保证l1,l2;2个各自的 LIST 本身不重复,此行代码不用写。否则会出现合并后 LIST 重复的问题,具体看业务需要l1=newArrayList<String>(newHashSet<>(l1));
for(Stringstr : l1){
System.out.println(str);
        }
    }
}

结果

b

c

a

k

l1 = new ArrayList<String>(new HashSet<>(l1));

Ps:如果没有这条以上代码,则结果为:

a

a

c

c

b

b

k

k

目录
相关文章
|
7月前
|
存储 安全 Java
【Java集合类面试二十五】、有哪些线程安全的List?
线程安全的List包括Vector、Collections.SynchronizedList和CopyOnWriteArrayList,其中CopyOnWriteArrayList通过复制底层数组实现写操作,提供了最优的线程安全性能。
|
7月前
|
Java
【Java集合类面试二十三】、List和Set有什么区别?
List和Set的主要区别在于List是一个有序且允许元素重复的集合,而Set是一个无序且元素不重复的集合。
|
5月前
|
安全 Java 程序员
深入Java集合框架:解密List的Fail-Fast与Fail-Safe机制
本文介绍了 Java 中 List 的遍历和删除操作,重点讨论了快速失败(fail-fast)和安全失败(fail-safe)机制。通过普通 for 循环、迭代器和 foreach 循环的对比,详细解释了各种方法的优缺点及适用场景,特别是在多线程环境下的表现。最后推荐了适合高并发场景的 fail-safe 容器,如 CopyOnWriteArrayList 和 ConcurrentHashMap。
110 5
|
5月前
|
Java 程序员 编译器
Java|如何正确地在遍历 List 时删除元素
从源码分析如何正确地在遍历 List 时删除元素。为什么有的写法会导致异常,而另一些不会。
108 3
|
5月前
|
Java 程序员
Java|List.subList 踩坑小记
不应该仅凭印象和猜测,就开始使用一个方法,至少花一分钟认真读完它的官方注释文档。
58 1
|
7月前
|
Java
用JAVA架建List集合为树形结构的代码方法
这段代码定义了一个表示树形结构的 `Node` 类和一个用于构建树形结构的 `TreeController`。`Node` 类包含基本属性如 `id`、`pid`、`name` 和 `type`,以及子节点列表 `children`。`TreeController` 包含初始化节点列表并将其转换为树形结构的方法。通过过滤和分组操作实现树形结构的构建。详情可见:[代码示例链接1](http://www.zidongmutanji.com/zsjx/43551.html),[代码效果参考链接2](https://www.257342.com/sitemap/post.html)。
75 5
|
6月前
|
Java API 开发者
代码小妙招:用Java轻松获取List交集数据
在Java中获取两个 `List`的交集可以通过 `retainAll`方法和Java 8引入的流操作来实现。使用 `retainAll`方法更为直接,但会修改原始 `List`的内容。而使用流则提供了不修改原始 `List`、更为灵活的处理方式。开发者可以根据具体的需求和场景,选择最适合的方法来实现。了解和掌握这些方法,能够帮助开发者在实际开发中更高效地处理集合相关的问题。
140 1
|
7月前
|
存储 Java API
【Java高手必备】揭秘!如何优雅地对List进行排序?掌握这几种技巧,让你的代码瞬间高大上!
【8月更文挑战第23天】本文深入探讨了Java中对List集合进行排序的各种方法,包括使用Collections.sort()、自定义Comparator以及Java 8的Stream API。通过示例代码展示了不同情况下如何选择合适的方法:从简单的整数排序到自定义类对象的排序,再到利用Comparator指定特殊排序规则,最后介绍了Stream API在排序操作中的简洁应用。理解这些技术的区别与应用场景有助于提高编程效率。
232 4
|
7月前
|
存储 Java 索引
|
7月前
|
Java
【Java基础面试四十六】、 List<? super T>和List<? extends T>有什么区别?
这篇文章阐述了Java泛型中的List<? super T>和List<? extends T>的区别,解释了通配符的使用规则,以及Java泛型设计原则确保了编译时无警告则运行时无ClassCastException异常。

热门文章

最新文章