Java中List去重

一、Stream 去重:list.stream().distinct()

public static List removeDuplicate(List list) {
    List newList = (List) list.stream().distinct().collect(Collectors.toList());
    return newList;
}

首先获得此 list 的 Stream,然后调用 distinct()。Java8 中提供流的方式对数据进行处理,非常快,底层用的是 ForkJoin,提供了并行处理,使得多个处理器同时处理流中的数据,所以耗时非常短。

二、通过 HashSet 剔除重复元素

public static List removeDuplicate(List list) {
    HashSet hashSet = new HashSet(list);
    list.clear();
    list.addAll(hashSet);
    return list;
}

总结:
此种方式是利用了 Set 的特性:元素不可重复,其底层原理是先计算每个对象的 hash 值,再比较元素值是否相同,如果相同,则保留最新的。

三、删除 ArrayList 中重复元素,保持顺序

//通过HashSet剔除重复元素
public static List removeDuplicate(List list) {
    Set set = new HashSet();
    List newList = new ArrayList();
    for (Iterator iter = list.iterator(); iter.hasNext(); ) {
        Object next = iter.next();
        if (set.add(next)) {
            newList.add(next);
        }
    }
    list.clear();
    list.addAll(newList);
    return list;
}

四、遍历 list,用 tempList.contain(),不存在 add

public static List removeDuplicate(List list) {
    List tempList = new ArrayList();
    for (int i = 0; i < list.size(); i++) {
        if (!tempList.contains(list.get(i))) {
            tempList.add(list.get(i));
        }
    }
    return tempList;
}

五、循环 list 中的所有元素然后删除重复

一定得是顺序重复的,乱序重复的不靠谱儿

//循环list中的所有元素然后删除重复
public static List removeDuplicate(List list) {
    for (int i = 0; i < list.size(); i++) {
        for (int j = list.size() - 1; j > i; j--) {
           if (list.get(i).equals(list.get(j))) {
                list.remove(list.get(i));
            }
        }
    }
    return list;
}

总结:
两层循环,外层循环从第一个元素向最后一个元素循环,内层循环是从最后一个元素向外层循环元素的当前元素循环。比较两个元素是否相等,如果相等,移除靠后的元素来进行去重。这种方法时间复杂度大于 O(n),小于 O(N²)。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 函数的意义:1.封装了多条语句2.可以在任何地方/时候执行。 ECMAscript中的函数特点 1.参数传递方式为...
    余生筑阅读 226评论 0 0
  • 蘑菇小姐坐在教室里靠窗的位置,窗外耀眼的阳光透过树荫的缝隙打在她的侧脸,瞬间又温柔了许多。此刻,一本正经的老师...
    柳絮萧萧阅读 227评论 0 0
  • 01 小学二年级,妈妈告诉我,“现在你是个小大人了,要听话懂事”。 “哦…”,其实我特别困惑,我想“我应该怎样懂事...
    刘媛媛Ivy阅读 1,110评论 18 12