今天我来介绍六种简单、高效的去重方法,帮助你轻松处理重复数据的困扰。无论是清理数据、筛选结果,还是优化代码,这些方法都能派上用场。让我们一起来看看吧!🔍🔄
🔴 HashSet去重
我们首先来谈谈最常见的去重方法之一——HashSet集合。它具备天生的“去重”特性,可以快速帮你剔除重复元素。只需要把原始的List集合转换成HashSet集合,就能实现去重的目的。让我们来看看具体实现代码:
public static void qcHashSet(List<Integer> list) {
HashSet<Integer> set = new HashSet<>(list);
System.out.print("HashSet 去重集合:" + set);
}
这样,重复的元素将被自动去除,你将得到一个没有重复数据的HashSet集合。🧹✨
🔴 方法二:TreeSet去重
除了HashSet集合外,我们还可以使用TreeSet集合来实现去重功能。TreeSet会自动对元素进行排序,并保证集合中不存在重复元素。让我们来看看具体实现代码:
public static void qcTreeSet(List<Integer> list) {
TreeSet<Integer> set = new TreeSet<>(list);
System.out.print("TreeSe 去重集合:" + set);
}
通过这段代码,你会获得一个有序且无重复元素的TreeSet集合。🌳🔢
🔴 方法三:LinkedHashSet去重
如果你希望保留集合中元素的插入顺序,同时实现去重,那么LinkedHashSet是一个不错的选择。它可以去除重复元素,且保持他们的插入顺序。让我们来看看具体实现代码:
public static void qcLinkedHashSet(List<Integer> list) {
LinkedHashSet<Integer> set = new LinkedHashSet<>(list);
System.out.print("LinkedHashSet 去重集合:" + set);
}
经过这段代码的处理,你将得到一个保留插入顺序且无重复数据的LinkedHashSet集合。🔗🧭
🔴 方法四:Iterator去重
如果前面的集合操作无法满足你的需求,别担心!我们还有其他方法。一种简单但有效的方式是使用迭代器循环遍历集合,并判断每个元素是否在集合中存在多次。如果存在多次,就将当前元素删除。让我们来看看具体实现代码:
public static void qcIterator(List<Integer> list) {
Iterator<Integer> iterator = list.iterator();
while (iterator.hasNext()) {
Integer item = iterator.next();
if (list.indexOf(item) != list.lastIndexOf(item)) {
iterator.remove();
}
}
System.out.print("Iterator 去重集合:" + list);
}
通过这段代码的处理,你将得到一个没有重复元素的集合。💫🗑️
🔴 方法五:Stream去重
除了迭代器,JDK 8 还为我们带来了强大的Stream流。通过使用Stream,你可以实现更多的功能,包括快速去重。让我们来看看具体实现代码:
public static void qcStream(List<Integer> list) {
list = list.stream().distinct().collect(Collectors.toList());
System.out.print("Stream 去重集合:" + list);
}
通过这段代码的处理,你将得到一个没有重复元素的列表。🌊🎣
🔴 方法六:创建新集合进行去重
除了Stream流之外,我们还可以新建一个集合,然后循环原始集合中的元素。每次循环时,判断当前元素是否在新集合中已存在,如果不存在,则插入;如果已存在,则舍弃。让我们来看看具体实现代码:
public static void qcContains(List<Integer> list) {
List<Integer> newList = new ArrayList<>(list.size());
list.forEach(i -> {
if (!newList.contains(i)) {
newList.add(i);
}
});
System.out.print("contains 去重集合:" + newList);
}
通过这段代码的处理,你将得到一个没有重复元素的集合。🆕🔀
总结:
希望这些去重方法能够帮助你处理重复数据,从而更加高效地进行数据分析、编程开发等工作。选择适合你需求的方法,并根据实际情况灵活运用。🔍💡
就这。。。。。
继续试验
我们做一个特别的函数
public static void exec(Consumer<List> function, List<Integer> parameter) {
//程序运行时间
long startTime = System.nanoTime();
// 调用传入的函数,传入列表
function.accept(parameter);
long endTime = System.nanoTime();
System.out.println("\t\t程序运行时间:" + (endTime - startTime) + " 纳秒");
}
你猜有何用
exec(Main::qcHashSet,list);
exec(Main::qcTreeSet,list);
exec(Main::qcLinkedHashSet,list);
exec(Main::qcIterator,list);
exec(Main::qcStream,list);
exec(Main::qcContains,list);
原集合大小:80
原集合大小:80
HashSet 去重集合:[3, 11, 13, 34, 79, 118] 程序运行时间:847584 纳秒
TreeSe 去重集合:[3, 11, 13, 34, 79, 118] 程序运行时间:394250 纳秒
LinkedHashSet 去重集合:[13, 3, 34, 79, 118, 11] 程序运行时间:237334 纳秒
Iterator 去重集合:[13, 3, 79, 118, 11, 34] 程序运行时间:161209 纳秒
Stream 去重集合:[13, 3, 79, 118, 11, 34] 程序运行时间:640209 纳秒
contains 去重集合:[13, 3, 79, 118, 11, 34] 程序运行时间:899625 纳秒
原集合大小:800
原集合大小:800
HashSet 去重集合:[3, 11, 13, 34, 79, 118] 程序运行时间:1071083 纳秒
TreeSe 去重集合:[3, 11, 13, 34, 79, 118] 程序运行时间:531250 纳秒
LinkedHashSet 去重集合:[13, 3, 34, 79, 118, 11] 程序运行时间:628250 纳秒
Iterator 去重集合:[13, 3, 79, 118, 11, 34] 程序运行时间:800666 纳秒
Stream 去重集合:[13, 3, 79, 118, 11, 34] 程序运行时间:1205166 纳秒
contains 去重集合:[13, 3, 79, 118, 11, 34] 程序运行时间:1296042 纳秒
原集合大小:8000
原集合大小:8000
HashSet 去重集合:[3, 11, 13, 34, 79, 118] 程序运行时间:1581875 纳秒
TreeSe 去重集合:[3, 11, 13, 34, 79, 118] 程序运行时间:2020250 纳秒
LinkedHashSet 去重集合:[13, 3, 34, 79, 118, 11] 程序运行时间:1683500 纳秒
Iterator 去重集合:[13, 3, 79, 118, 11, 34] 程序运行时间:6308583 纳秒
Stream 去重集合:[13, 3, 79, 118, 11, 34] 程序运行时间:1097916 纳秒
contains 去重集合:[13, 3, 79, 118, 11, 34] 程序运行时间:633166 纳秒
原集合大小:80000
原集合大小:80000
HashSet 去重集合:[3, 11, 13, 34, 79, 118] 程序运行时间:7398625 纳秒
TreeSe 去重集合:[3, 11, 13, 34, 79, 118] 程序运行时间:4391917 纳秒
LinkedHashSet 去重集合:[13, 3, 34, 79, 118, 11] 程序运行时间:7989833 纳秒
Iterator 去重集合:[13, 3, 79, 118, 11, 34] 程序运行时间:336782916 纳秒
Stream 去重集合:[13, 3, 79, 118, 11, 34] 程序运行时间:586167 纳秒
contains 去重集合:[13, 3, 79, 118, 11, 34] 程序运行时间:455250 纳秒
原集合大小:80万。。。。
你自己试试,结果告诉我。。
回复去重
可获得完整源代码
Was this helpful?
0 / 0