import java.util.ArrayList;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.TreeSet; /**
* @author 马家立
* @version 创建时间是:2019年8月16日上午9:35:11
* @Description:TODO List去重比较
*/
public class listRemoveDuplicate {
/**
* @Title:removeDuplicateByHashSet
* @author:马家立
* @date:2019年9月18日
* @Description:TODO 方式1:HashSet无序去重
* @param <E>
* @param list
* void
*/
public static <E> void removeDuplicateByHashSet(List<E> list) {
// 初始化HashSet对象
HashSet<E> set = new HashSet<E>();
List<E> result = new ArrayList<E>();
for (E e : result) {
if (set.add(e)) {
result.add(e);
}
}
// 把List集合所有元素清空
list.clear();
// 把HashSet对象添加至List集合
list.addAll(result);
} /**
* @Title:removeDuplicateByLinkedHashSet
* @author:马家立
* @date:2019年9月18日 @Description:TODO 方式2:LinkedHashSet有序去重
* @param <E>
* @param list
* void
*/
public static <E> void removeDuplicateByLinkedHashSet(List<E> list) {
// 初始化LinkedHashSet对象,并把list对象元素赋值给LinkedHashSet对象
LinkedHashSet<E> set = new LinkedHashSet<E>(list);
// 把List集合所有元素清空
list.clear();
// 把LinkedHashSet对象添加至List集合
list.addAll(set);
} /**
* @Title:removeDuplicateByTreeSet
* @author:马家立
* @date:2019年9月18日 @Description:TODO 方式3:TreeSet去重
* @param <E>
* @param list
* void
*/
public static <E> void removeDuplicateByTreeSet(List<E> list) {
// 初始化TreeSet对象,并把list对象元素赋值给TreeSet对象
TreeSet<E> treeSet = new TreeSet<E>(list);
// 把List集合所有元素清空
list.clear();
// 把TreeSet对象添加至List集合
list.addAll(treeSet);
} /**
* @Title:removeDuplicateByEquals
* @author:马家立
* @date:2019年9月18日 @Description:TODO 方式4:双重for_iterate循环_equals_remove去重
* @param <E>
* @param list
* void
*/
public static <E> void removeDuplicateByEquals(List<E> list) {
for (int i = 0; i < list.size(); i++) {
for (int j = i + 1; j < list.size(); j++) {
if (list.get(i).equals(list.get(j))) {
list.remove(j);
}
}
}
} /**
* @Title:removeDuplicateByContains1
* @author:马家立
* @date:2019年9月18日
* @Description:TODO 方式5:forEach方式循环_contains去重
* @param <E>
* @param list
* void
*/
public static <E> void removeDuplicateByContains1(List<E> list) {
List<E> result = new ArrayList<E>();
for (E e : list) {
if (!result.contains(e)) {
result.add(e);
}
}
// 把List集合所有元素清空
list.clear();
// 把所有对象添加至List集合
list.addAll(result);
} /**
* @Title:removeDuplicateByContains2
* @author:马家立
* @date:2019年9月18日 @Description:TODO 方式6:list.stream()方式循环_contains去重
* @param <E>
* @param list
* void
*/
public static <E> void removeDuplicateByContains2(List<E> list) {
List<E> result = new ArrayList<E>(list.size());
list.stream().forEach(p -> {
if (!result.contains(p)) {
result.add(p);
}
});
} public static void main(String[] args) {
// 声明List
final List<String> list = new ArrayList<String>();
// List添加数据
for (int i = 0; i < 1000; i++) {
if (0 == (i % 50)) {
list.add("我是皮卡兵");
} else if (0 == (i % 25)) {
list.add("我是皮卡乒");
} else if (0 == (i % 10)) {
list.add("我是皮卡乓");
} else if (0 == (i % 5)) {
list.add("我是皮卡皮");
} else {
list.add("我是第-" + i + "个皮卡丘");
}
list.add("哇咔哇,电光一闪");
}
List<String> list1 = list;
List<String> list2 = list;
List<String> list3 = list;
List<String> list4 = list;
List<String> list5 = list;
List<String> list6 = list;
// 循环次数
int forTimes = 100;
// 纳秒级别
long time = System.nanoTime(); // 方式一
for (int i = 0; i < forTimes; i++) {
removeDuplicateByHashSet(list1);
}
long time1 = System.nanoTime();
System.out.println("方式1:HashSet无序去重的时间是:\t" + ((time1 - time)) + "纳秒"); // 方式二
for (int i = 0; i < forTimes; i++) {
removeDuplicateByLinkedHashSet(list2);
}
long time2 = System.nanoTime();
System.out.println("方式2:LinkedHashSet有序去重的时间是:\t" + ((time2 - time1)) + "纳秒"); // 方式三
for (int i = 0; i < forTimes; i++) {
removeDuplicateByTreeSet(list3);
}
long time3 = System.nanoTime();
System.out.println("方式3:TreeSet去重的时间是:\t" + ((time3 - time2)) + "纳秒"); // 方式四
for (int i = 0; i < forTimes; i++) {
removeDuplicateByEquals(list4);
}
long time4 = System.nanoTime();
System.out.println("方式4:双重for_iterate循环_equals_remove去重的时间是:\t" + ((time4 - time3)) + "纳秒"); // 方式五
for (int i = 0; i < forTimes; i++) {
removeDuplicateByContains1(list5);
}
long time5 = System.nanoTime();
System.out.println("方式5:forEach方式循环_contains去重的时间是:\t" + ((time5 - time4)) + "纳秒"); // 方式六
for (int i = 0; i < forTimes; i++) {
removeDuplicateByContains2(list6);
}
long time6 = System.nanoTime();
System.out.println("方式6:list.stream()方式循环_contains去重的时间是:\t" + ((time6 - time5)) + "纳秒"); }
}

结果:

方式1:HashSet无序去重的时间是:    330200纳秒
方式2:LinkedHashSet有序去重的时间是: 660500纳秒
方式3:TreeSet去重的时间是: 758700纳秒
方式4:双重for_iterate循环_equals_remove去重的时间是: 37300纳秒
方式5:forEach方式循环_contains去重的时间是: 146900纳秒
方式6:list.stream()方式循环_contains去重的时间是: 41510900纳秒

List去重比较的更多相关文章

  1. JavaScript常见的五种数组去重的方式

    ▓▓▓▓▓▓ 大致介绍 JavaScript的数组去重问题在许多面试中都会遇到,现在做个总结 先来建立一个数组 var arr = [1,2,3,3,2,'我','我',34,'我的',NaN,NaN ...

  2. 数组去重 JS

    我说的数组去重是这样的: var arr = ['f', 'a',  'b', 'd', 'e', 'g']  ; var str='f'; 去除arr中的str 最简单的是遍历arr与str做比较, ...

  3. [Algorithm] 使用SimHash进行海量文本去重

    在之前的两篇博文分别介绍了常用的hash方法([Data Structure & Algorithm] Hash那点事儿)以及局部敏感hash算法([Algorithm] 局部敏感哈希算法(L ...

  4. JS去重及字符串奇数位小写转大写

    面试中经常会考到数组的去重.作为一名合格的前端开发者,不知道几种去重方法是在不应该.废话不多说直接开撸-- 一.indexOf()方法 实现思路:使用indexOf()方法来判断新数组中是否有这个值, ...

  5. js数组去重

    这就是数组去重了...var str=['hello','node','element','node','hello','blue','red'];var str1=[]; function firs ...

  6. [Hadoop]-从数据去重认识MapReduce

    这学期刚好开了一门大数据的课,就是完完全全简简单单的介绍的那种,然后就接触到这里面最被人熟知的Hadoop了.看了官网的教程[吐槽一下,果然英语还是很重要!],嗯啊,一知半解地搭建了本地和伪分布式的, ...

  7. 1.uniq去重命令讲解

    uniq命令: 常见参数: -c,--count *****      在每行旁边显示改行重复出现的次数 -d,--repeated        仅显示重复出现的行,2次或2次以上的行,默认的去重包 ...

  8. python list dict 去重的两种方式

    def dedupe(items, key=None): seen = set() for item in items: val = item if key is None else key(item ...

  9. js给数组去重写法

    数组为 var list =['A','B','A']; 法一:常规做法,新建list,给list添加元素,添加前判断是否包含 var removeRepeatItem = function(list ...

  10. 分享一种容易理解的js去重排序方法

    <script> var arr=[1,8,6,4,88,22,99,4,6,86,5,58,89,5]; //先使用sort()函数去重 var a=arr.sort(function ...

随机推荐

  1. SNIPER-MXNet中出现ValueError: could not broadcast input array from shape (XXX,5) into shape (100,5)

    这是关于标签数量的问题,搜索"100," ,其中与读标签框有关,或者与标签匹配有关的,全部改到大于“图片中最多有的标签数量”即可.

  2. linux 抓包工具tcpdump和tshark

    yum install tcpdump tcpdump -nn -c 100 抓一百条 tcpdump -nn -i eth0 指定网卡 tcpdump -nn port 22 指定端口 tcpdum ...

  3. 小米 9 SE 获取Root 和 安装Magisk

    1.刷入第三方REC 和 Magisk 参考教程:[LR.Team]小米9SE专版TWRP中英文修改优化版_小米9 SE_MIUI论坛 使用上面的工具,傻瓜式操作即可. 关于刷入成功之后的说明:刷入成 ...

  4. 性能工具之JMeter+InfluxDB+Grafana打造压测可视化实时监控(centos7环境)

    前提条件,已经安装jmeter并可以运行 1.安装influxdata wget et https://dl.influxdata.com/influxdb/releases/influxdb-1.7 ...

  5. 如何使用RedisTemplate访问Redis数据结构之list

    Redis的List数据结构 这边我们把RedisTemplate序列化方式改回之前的 Jackson2JsonRedisSerializer<Object> jackson2JsonRe ...

  6. 如何使用RedisTemplate访问Redis数据结构之字符串操作

    Redis 数据结构简介 Redis 可以存储键与5种不同数据结构类型之间的映射,这5种数据结构类型分别为String(字符串).List(列表).Set(集合).Hash(散列)和 Zset(有序集 ...

  7. Block Breaker HDU - 6699(深搜,水,写下涨涨记性)

    Problem Description Given a rectangle frame of size n×m. Initially, the frame is strewn with n×m squ ...

  8. PHP获取指定时间的前6个月月份 、获取前6天日期

    //获取前6个月月份 public function to_sex_month(){ $today = input('param.today') ? input('param.today') : da ...

  9. QQ浏览器、搜狗浏览器等兼容模式下,Asp.NetCore下,Cookie、Session失效问题

    原文:QQ浏览器.搜狗浏览器等兼容模式下,Asp.NetCore下,Cookie.Session失效问题 这些狗日的浏览器在兼容模式下,保存Cookie会失败,是因为SameSiteMode默认为La ...

  10. 【原创】大叔问题定位分享(36)openresty(nginx+lua)中获取不到post数据,ngx.req.get_body_data返回nil

    openresty(nginx+lua)中获取不到post数据,ngx.req.get_body_data返回nil This function returns nil if the request ...