今天我来介绍六种简单、高效的去重方法,帮助你轻松处理重复数据的困扰。无论是清理数据、筛选结果,还是优化代码,这些方法都能派上用场。让我们一起来看看吧!🔍🔄

image-20231212101800809

🔴 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);
    }

通过这段代码的处理,你将得到一个没有重复元素的集合。🆕🔀

总结:

希望这些去重方法能够帮助你处理重复数据,从而更加高效地进行数据分析、编程开发等工作。选择适合你需求的方法,并根据实际情况灵活运用。🔍💡

就这。。。。。
image-20231212101613740
继续试验

我们做一个特别的函数

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);

image-20231212101534772

原集合大小: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

发表回复 0

Your email address will not be published.