Java中5种List的去重方法及它们的效率对比,你用对了吗?

01、使用两个for循环实现List去重(有序)
/**使用两个for循环实现List去重(有序)
*
* @param list
* */
public static List removeDuplicationBy2For(List<Integer> 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);
}
}
}
return list;
}
02、使用List集合contains方法循环遍历(有序)
/**使用List集合contains方法循环遍历(有序)
*
* @param list
* */
public static List removeDuplicationByContains(List<Integer> list) {
List<Integer> newList =new ArrayList<>();
for (int i=0;i<list.size();i++)
{
boolean isContains =newList.contains(list.get(i));
if(!isContains){
newList.add(list.get(i));
}
}
list.clear();
list.addAll(newList);
return list;
}
03、使用HashSet实现List去重(无序)
/**使用HashSet实现List去重(无序)
*
* @param list
* */
public static List removeDuplicationByHashSet(List<Integer> list) {
HashSet set = new HashSet(list);
//把List集合所有元素清空
list.clear();
//把HashSet对象添加至List集合
list.addAll(set);
return list;
}
04、使用TreeSet实现List去重(有序)
/**使用TreeSet实现List去重(有序)
*
* @param list
* */
public static List removeDuplicationByTreeSet(List<Integer> list) {
TreeSet set = new TreeSet(list);
//把List集合所有元素清空
list.clear();
//把HashSet对象添加至List集合
list.addAll(set);
return list;
}
05、使用java8新特性stream实现List去重(有序)
/**使用java8新特性stream实现List去重(有序)
*
* @param list
* */
public static List removeDuplicationByStream(List<Integer> list) {
List newList = list.stream().distinct().collect(Collectors.toList());
return newList;
}
效率测试代码
public static void main(String args[]) {
List<Integer> list1 = new ArrayList<>();
List<Integer> list2 = new ArrayList<>();
List<Integer> list3 = new ArrayList<>();
List<Integer> list4 = new ArrayList<>();
List<Integer> list5 = new ArrayList<>();
Random random =new Random();
for (int i = 0; i < 100000; i++) {
int value =random.nextInt(500);
list1.add(value);
list2.add(value);
list3.add(value);
list4.add(value);
list5.add(value);
}
long startTime ;
long endTime;
startTime = System.currentTimeMillis();
removeDuplicationByHashSet(list1);
endTime = System.currentTimeMillis();
System.out.println("使用HashSet实现List去重时间:"+(endTime-startTime)+"毫秒");
startTime = System.currentTimeMillis();
removeDuplicationByTreeSet(list2);
endTime = System.currentTimeMillis();
System.out.println("使用TreeSet实现List去重时间:"+(endTime-startTime)+"毫秒");
startTime = System.currentTimeMillis();
removeDuplicationByStream(list3);
endTime = System.currentTimeMillis();
System.out.println("使用java8新特性stream实现List去重:"+(endTime-startTime)+"毫秒");
startTime = System.currentTimeMillis();
removeDuplicationBy2For(list4);
endTime = System.currentTimeMillis();
System.out.println("使用两个for循环实现List去重:"+(endTime-startTime)+"毫秒");
startTime = System.currentTimeMillis();
removeDuplicationByContains(list5);
endTime = System.currentTimeMillis();
System.out.println("使用List集合contains方法循环遍历:"+(endTime-startTime)+"毫秒");
}
结果:
使用HashSet实现List去重时间:40毫秒
使用TreeSet实现List去重时间:36毫秒
使用java8新特性stream实现List去重:78毫秒
使用两个for循环实现List去重:533毫秒
使用List集合contains方法循环遍历:40毫秒
更多测试结果
随机数在100范围内:
使用HashSet实现List去重时间:32毫秒
使用TreeSet实现List去重时间:40毫秒
使用java8新特性stream实现List去重:128毫秒
使用两个for循环实现List去重:693毫秒
使用List集合contains方法循环遍历:30毫秒
随机数在1000范围内:
使用HashSet实现List去重时间:34毫秒
使用TreeSet实现List去重时间:72毫秒
使用java8新特性stream实现List去重:125毫秒
使用两个for循环实现List去重:1063毫秒
使用List集合contains方法循环遍历:85毫秒
随机数在10000范围内:
使用HashSet实现List去重时间:51毫秒
使用TreeSet实现List去重时间:103毫秒
使用java8新特性stream实现List去重:201毫秒
使用两个for循环实现List去重:5448毫秒
使用List集合contains方法循环遍历:791毫秒
结论
无序HashSet,有序TreeSet
Java 的知识面非常广,面试问的涉及也非常广泛,重点包括:Java 基础、Java 并发,JVM、MySQL、数据结构、算法、Spring、微服务、MQ 等等,涉及的知识点何其庞大,所以我们在复习的时候也往往无从下手,今天小编给大家带来一套 Java 面试题,题库非常全面,包括 Java 基础、Java 集合、JVM、Java 并发、Spring全家桶、Redis、MySQL、Dubbo、Netty、MQ 等等,包含 Java 后端知识点 2000 +
资料获取方式:关注公众号:“程序员白楠楠”获取上述资料
Java中5种List的去重方法及它们的效率对比,你用对了吗?的更多相关文章
- Java中8种常见的排序方法
排序方法的演示1)插入排序(直接插入排序.希尔排序)2)交换排序(冒泡排序.快速排序)3)选择排序(直接选择排序.堆排序)4)归并排序5)分配排序(基数排序)所需辅助空间最多:归并排序所需辅助空间最少 ...
- Java中四种遍历List的方法
package com.ietree.basic.collection.loop; import java.util.ArrayList; import java.util.Iterator; imp ...
- JAVA 中两种判断输入的是否是数字的方法__正则化_
JAVA 中两种判断输入的是否是数字的方法 package t0806; import java.io.*; import java.util.regex.*; public class zhengz ...
- Java中几种常用数据类型之间转换的方法
Java中几种常用的数据类型之间转换方法: 1. short-->int 转换 exp: short shortvar=0; int intvar=0; shortvar= (short) in ...
- Java中四种引用:强、软、弱、虚引用
这篇文章非常棒:http://alinazh.blog.51cto.com/5459270/1276173 Java中四种引用:强.软.弱.虚引用 1.1.强引用当我们使用new 这个关键字创建对象时 ...
- java中获取日期和时间的方法总结
1.获取当前时间,和某个时间进行比较.此时主要拿long型的时间值. 方法如下: 要使用 java.util.Date .获取当前时间的代码如下 Date date = new Date(); da ...
- jsp中四种传递参数的方法
jsp中四种传递参数的方法如下: 1.form表单 2.request.setAttribute();和request.getAttribute(); 3.超链接:<a herf="i ...
- java中四种引用类型
java中四种引用类型 今天看代码,里面有一个类java.lang.ref.SoftReference把小弟弄神了,试想一下,接触java已经有3年了哇,连lang包下面的类都不了解,怎么混.后来在 ...
- java中遍历map对象的多种方法
在Java中如何遍历Map对象 How to Iterate Over a Map in Java 在java中遍历Map有不少的方法.我们看一下最常用的方法及其优缺点. 既然java中的所有ma ...
随机推荐
- WebFlux快速上手
一.新建项目 示例使用IDEA快速创建基于SpringBoot的工程. springboot 2.3.1 java 8 WebFlux 必须选用Reactive的库 POM 依赖 <depend ...
- centos8平台yum无法安装一些常用软件的解决,如:screen,iftop,nethogs
一,例如:安装screen时报错: [root@localhost liuhongdi]# yum install screen 上次元数据过期检查:17:39:58 前,执行于 2020年03月18 ...
- ansible用get_url模块在受控机下载文件(ansible2.9.5)
一,ansible的get_url模块用途: get_url模块可以在受控机下载文件 可以理解成从受控端执行wget 下载的url支持:http | https | ftp 三种协议 说明:刘宏缔 ...
- python selenium 自动登陆
#-*- coding:utf8 -*- # 导入selenium2中的webdriver库 from time import sleep from selenium import webdriver ...
- Tomcat6.0 支持 https
环境信息 Linux系统 + Tomcat (程序页面可以运行前提下) 条件:安装了JDK 查看指定版本信息 1 进入$JAVA_HOME/bin目录 (一般是这个目录 /usr/java ...
- Baolu CSV Data Set Config
1.背景 大家在平常使用JMeter测试工具时,对CSV Data Set Config 配置元件肯定不会陌生.如果我们的压测场景涉及到数据库更新操作(如:转账接接口)则需要对参数化数据进行分块,可就 ...
- [阿里DIN]从论文源码学习 之 embedding_lookup
[阿里DIN]从论文源码学习 之 embedding_lookup 目录 [阿里DIN]从论文源码学习 之 embedding_lookup 0x00 摘要 0x01 DIN代码 1.1 Embedd ...
- 基于gin的golang web开发:路由二
在基于gin的golang web开发:路由中我们介绍了Gin的路由和一些获取链接中参数的方法,本文继续介绍其他获取参数的方法. 文件上传 在web开发中文件上传是一个很常见的需求,下面我们来看一下基 ...
- [String] intern()方法
intern()方法设计的初衷,就是重用String对象,以节省内存消耗. JDK1.6以及以前版本中,常量池是放在 Perm 区(属于方法区)中的,熟悉JVM的话应该知道这是和堆区完全分开的. 使用 ...
- Java 8新特性解读
(四)Java 8 相关知识 关于 Java 8 中新知识点,面试官会让你说说 Java 8 你了解多少,下面分享一我收集的 Java 8 新增的知识点的内容,前排申明引用自:Java8新特性及使用 ...