对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去重方式及效率对比的更多相关文章

  1. java List 去重方式及效率对比

    01 实现思路:使用两个for循环遍历集合所有元素,然后进行判断是否有相同元素,如果有,则去除.这种方式是大部分最先想到的,也是最简单的实现方式.其中,这种方式可以保证List集合原来的顺序不变. 代 ...

  2. List集合去重方式及效率对比

    List集合相信大家在开发过程中几乎都会用到.有时候难免会遇到集合里的数据是重复的,需要进行去除.然而,去重方式有好几种方式,你用的是哪种方式呢?去重方式效率是否是最高效.最优的呢?今天就给大家讲解一 ...

  3. java中多种写文件方式的效率对比实验

    一.实验背景 最近在考虑一个问题:“如果快速地向文件中写入数据”,java提供了多种文件写入的方式,效率上各有异同,基本上可以分为如下三大类:字节流输出.字符流输出.内存文件映射输出.前两种又可以分为 ...

  4. 浅谈集合框架四——集合扩展:集合循环输出方式及list输出方式的效率对比

    最近刚学完集合框架,想把自己的一些学习笔记与想法整理一下,所以本篇博客或许会有一些内容写的不严谨或者不正确,还请大神指出.初学者对于本篇博客只建议作为参考,欢迎留言共同学习. 之前有介绍集合框架的体系 ...

  5. java list去重方式,以及效率问题

    之前面试被问到关于java如何去重的问题,当时没怎么留意,今天刚好项目中用到了,所以记录一下. 实体类: /** * 用户类 */ class User{ private String usernam ...

  6. java map遍历方式及效率

    本文转载自Java Map遍历方式的选择. 只给出遍历方式及结论.测试数据可以去原文看. 如果你使用HashMap 同时遍历key和value时,keySet与entrySet方法的性能差异取决于ke ...

  7. Java——反射三种方式的效率对比

    转载自:https://blog.csdn.net/aitcax/article/details/52694423 1 使用field(效率最高)             long start = S ...

  8. 将List按照指定大小等分的几种实现方式和效率对比及优化

    今天碰到一个需求,定时任务,批量从表里取数据并做一些其他操作然后再存表,每次取1000条,由于计算过程比较耗时所以要起多个线程同时跑,需要将List按照指定大小等分,如每100条数据起一个线程,若最后 ...

  9. python下图像读取方式以及效率对比

    https://zhuanlan.zhihu.com/p/30383580 opencv速度最快,值得注意的是mxnet的采用多线程读取的方式,可大大加速

随机推荐

  1. Ryuji doesn't want to study 2018 徐州赛区网络预赛

    题意: 1.区间求 a[l]×L+a[l+1]×(L−1)+⋯+a[r−1]×2+a[r](L is the length of [ l, r ] that equals to r - l + 1) ...

  2. 【刷题】BZOJ 2724 [Violet 6]蒲公英

    Description Input 修正一下 l = (l_0 + x - 1) mod n + 1, r = (r_0 + x - 1) mod n + 1 Output Sample Input ...

  3. VirtualBox 文件共享及网络配置技巧

    文件共享   1. 安装增强功能 2. 分配数据空间 这样就可以在virtualbox里访问本地的数据了:   网络配置

  4. 【bzoj4012】 HNOI2015—开店

    http://www.lydsy.com/JudgeOnline/problem.php?id=4012 (题目链接) 题意 一棵树,每条边有正边权,每个点的点权非负.若干组询问,强制在线,每次查询点 ...

  5. 【bzoj3994】 SDOI2015—约数个数和

    http://www.lydsy.com/JudgeOnline/problem.php?id=3994 (题目链接) 题意 多组询问,给出${n,m}$,求${\sum_{i=1}^n\sum_{j ...

  6. LOJ#2540 随机算法

    题意:给定图,随机一个排列,依次加点,如果加点之后不是独立集就不加.求最后得到一个最大独立集的概率. 解:就是求有多少个排列可以加出最大独立集. 显然有一个3n的状压DP,0表示没加,1表示没加上,2 ...

  7. ctrl+E 快速显示当前打开的编辑列表

    ctrl+E 快速显示当前打开的编辑列表

  8. git 创建空提交

    git commit --allow-empty -m "Empty Commit to setup deployments"

  9. linux 条件变量与线程池

    条件变量Condition Variables 概述 1. 条件变量提供了另外一种线程同步的方式.如果没有条件变量,程序需要使用线程连续轮询(可能在临界区critical section内)方式检查条 ...

  10. TensorFlow分布式实践

    大数据时代,基于单机的建模很难满足企业不断增长的数据量级的需求,开发者需要使用分布式的开发方式,在集群上进行建模.而单机和分布式的开发代码有一定的区别,本文就将为开发者们介绍,基于TensorFlow ...