java List去重方式及效率对比

Posted tc310

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java List去重方式及效率对比相关的知识,希望对你有一定的参考价值。

对List去重并保证添加顺序主要有三种方式:

方式一,利用HashSet不能添加重复数据的特性 由于HashSet不能保证添加顺序,所以只能作为判断条件:

    private static void removeDuplicate(List<String> list) {
        HashSet<String> set = new HashSet<String>(list.size());
        List<String> result = new ArrayList<String>(list.size());
        for (String str : list) {
            if (set.add(str)) {
                result.add(str);
            }
        }
        list.clear();
        list.addAll(result);
    }

方式二,利用LinkedHashSet不能添加重复数据并能保证添加顺序的特性 :

    private static void removeDuplicate2(List<String> list) {
        LinkedHashSet<String> set = new LinkedHashSet<String>(list.size());
        set.addAll(list);
        list.clear();
        list.addAll(set);
    }

方式三,利用List的contains方法循环遍历:

    private static void removeDuplicate3(List<String> list) {
        List<String> result = new ArrayList<String>(list.size());
        for (String str : list) {
            if (!result.contains(str)) {
                result.add(str);
            }
        }
        list.clear();
        list.addAll(result);
    }

测试方法:

    public static void main(String[] args){      
        
        final List<String> list = new ArrayList<String>();
        for (int i = 0; i < 1000; i++) {
            list.add("haha-" + i);
        }

        long time = System.currentTimeMillis();
        for (int i = 0; i < 10000; i++) {
            removeDuplicate(list);
        }
        long time1 = System.currentTimeMillis();
        System.out.println("time1:"+(time1-time));

        for (int i = 0; i < 10000; i++) {
            removeDuplicate2(list);
        }
        long time2 = System.currentTimeMillis();
        System.out.println("time2:"+(time2-time1));

        for (int i = 0; i < 10000; i++) {
            removeDuplicate3(list);
        }
        long time3 = System.currentTimeMillis();
        System.out.println("time3:"+(time3-time2));
      }

 

测试结果:

time1:451
time2:579
time3:62113

 

结论:

推荐用方法一或方法二的方式进行去重 

 

以上是关于java List去重方式及效率对比的主要内容,如果未能解决你的问题,请参考以下文章

debug底层java代码,对list中的数据去重的正确姿势,及对比java list remove正确使用方法与错误使用

ArrayList去重常用的四种方式及性能对比(JMH性能分析)

Java List遍历方法及其效率对比

Java List去重以及效率分析

Java 数组转 List 的三种方式及对比

java List 去重(两种方式)