List去重比较
- 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去重比较的更多相关文章
- JavaScript常见的五种数组去重的方式
▓▓▓▓▓▓ 大致介绍 JavaScript的数组去重问题在许多面试中都会遇到,现在做个总结 先来建立一个数组 var arr = [1,2,3,3,2,'我','我',34,'我的',NaN,NaN ...
- 数组去重 JS
我说的数组去重是这样的: var arr = ['f', 'a', 'b', 'd', 'e', 'g'] ; var str='f'; 去除arr中的str 最简单的是遍历arr与str做比较, ...
- [Algorithm] 使用SimHash进行海量文本去重
在之前的两篇博文分别介绍了常用的hash方法([Data Structure & Algorithm] Hash那点事儿)以及局部敏感hash算法([Algorithm] 局部敏感哈希算法(L ...
- JS去重及字符串奇数位小写转大写
面试中经常会考到数组的去重.作为一名合格的前端开发者,不知道几种去重方法是在不应该.废话不多说直接开撸-- 一.indexOf()方法 实现思路:使用indexOf()方法来判断新数组中是否有这个值, ...
- js数组去重
这就是数组去重了...var str=['hello','node','element','node','hello','blue','red'];var str1=[]; function firs ...
- [Hadoop]-从数据去重认识MapReduce
这学期刚好开了一门大数据的课,就是完完全全简简单单的介绍的那种,然后就接触到这里面最被人熟知的Hadoop了.看了官网的教程[吐槽一下,果然英语还是很重要!],嗯啊,一知半解地搭建了本地和伪分布式的, ...
- 1.uniq去重命令讲解
uniq命令: 常见参数: -c,--count ***** 在每行旁边显示改行重复出现的次数 -d,--repeated 仅显示重复出现的行,2次或2次以上的行,默认的去重包 ...
- python list dict 去重的两种方式
def dedupe(items, key=None): seen = set() for item in items: val = item if key is None else key(item ...
- js给数组去重写法
数组为 var list =['A','B','A']; 法一:常规做法,新建list,给list添加元素,添加前判断是否包含 var removeRepeatItem = function(list ...
- 分享一种容易理解的js去重排序方法
<script> var arr=[1,8,6,4,88,22,99,4,6,86,5,58,89,5]; //先使用sort()函数去重 var a=arr.sort(function ...
随机推荐
- Lua实现简单的类,继承,多态 实例
-- 类的例子,长方形的类,具备一个打印面积方法和一个设置长宽的方法 --lua实现类的思路,定义出来的对象在lua中可以访问自己有的成员,访问成员函数实际上是通过元表的__index方法实现的,具体 ...
- Java工程师学习指南第3部分:Spring与SpringMVC源码解析
本文整理了微信公众号[Java技术江湖]发表和转载过的Spring全家桶优质文章,想看到更多Java技术文章,就赶紧关注吧. 前后端分离,我怎么就选择了 Spring Boot + Vue 技术栈? ...
- UPDATE SELECT OUTPUT
-- 定义临时表变量,用于 output into 使用 DECLARE @VarOrderStatus table ( OrderNo nvarchar(50) NULL) -- update 表U ...
- elasticsearch 映射 dynamic用法
- CentOS7 安装mysql(YUM源方式)
1.下载mysql源安装包 $ wget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm 2.安装mysql ...
- GitLab中批量更换路径并保留历史记录
git-change-path.sh #!/bin/bash cat git-name.txt | while read line do echo $line git clone --mirror g ...
- [转帖]IIS7配置Gzip压缩
IIS7配置Gzip压缩 https://www.cnblogs.com/coce/p/6804373.html II7中自带了gzip功能,理论上应该比ii6配置起来应该简单一点,但是容易出的问 ...
- 正式发布! .NET开发控件集ComponentOne 新版本加入Blazor UI
近期,由葡萄城推出的ComponentOne .NET开发控件集正式发布最新版本! ComponentOne 是一套专注于企业 .NET开发.支持 .NET Core 平台,并完美集成于 Visual ...
- oracle索引2
问什么问题? 索引有什么代价?哪些场景下你需要建索引?或者有时候反过来问,哪些场景下不推荐建索引. 建好索引之后,怎么才能最高效地利用索引?或者反过来问,请说出一个无法有效利用已建索引的案例. 索引的 ...
- 用java转换文件的字符集
中文乱码真的是让人很头疼问题,有了这个方法应该能缓解这种头疼,用的是递归方式查找文件,直接在原文件中修改,小心使用(在本地测试效果有点诡异呀,没有达到预期效果). package com.hy.uti ...