ArrayList的去重问题
面试被问及arraylist的去重问题,现将自己想的两种解决方案写在下面
/**
* Description:
* ClassName:Uniq
* Package:com.syd.interview
* Date:2018/7/3 18:59
* Author: syd-fish
*/
public class Uniq { public static void main(String[] args) {
List<String> stringList = generateRandom(100000); long t1 = System.nanoTime();
boolean flag = uniqSet(stringList);
long t2 = System.nanoTime();
if (flag){
System.out.println("nanoTime-set = [" + (t2-t1)+ "]");
}else{
System.err.print("error");
} long t3 = System.nanoTime();
boolean flag2 = uniqArrayList(stringList);
long t4 = System.nanoTime();
if (flag){
System.out.println("nanoTime-ArrayList = [" + (t4-t3)+ "]");
}else{
System.err.print("error");
} } private static List<String> generateRandom(int m){
List<String> list = new ArrayList<String>();
for (int i=0;i<m ; i++) {
list.add("Monday");
list.add("Tuesday");
list.add("Wednesday");
list.add("Thursday");
list.add("Friday");
list.add("Saturday");
list.add("Sunday");
list.add("January");
}
return list;
}
private static boolean uniqSet(List<String> stringList){
Set<String> set = new HashSet<String>();
boolean flag = true;
for (String str : stringList){
set.add(str);
}
if (8 == set.size()) {
flag = true;
}else {
flag = false; }
return flag;
} private static boolean uniqArrayList(List<String> stringList){
List<Object> list = new ArrayList<Object>();
Iterator it = stringList.iterator();
boolean flag;
while (it.hasNext()){
Object str = it.next();
if (!list.contains(str)){
list.add(str);
}
}
if (8 == list.size()) {
flag = true;
}else {
flag = false; }
return flag;
}
}
当m小于10000的量级时,uniqArrayList性能要好于uniqSet。
arraylist的初始默认容量是10,hashset的初始默认容量是16,所以二者都不存在扩容的问题
set的底层数据结构是哈希表,特点是添加慢,查找迅速;
arraylist的底层数据结构是数组,特点是添加迅速,查找慢;
所以当数据量小的时候,添加占主导因素,uniqArrayList性能要好于uniqSet,
当达到一定的数据量的时候,查找占主导因素,uniqSet性能要好于uniqArrayList。
ArrayList的去重问题的更多相关文章
- List集合对象去重及按属性去重的8种方法-java基础总结系列第六篇
最近在写一些关于java基础的文章,但是我又不想按照教科书的方式去写知识点的文章,因为意义不大.基础知识太多了,如何将这些知识归纳总结,总结出优缺点或者是使用场景才是对知识的升华.所以我更想把java ...
- springboot集成elasticsearch
在基础阶段学习ES一般是首先是 安装ES后借助 Kibana 来进行CURD 了解ES的使用: 在进阶阶段可以需要学习ES的底层原理,如何通过Version来实现乐观锁保证ES不出问题等核心原理: 第 ...
- 18.libgdx制作预览图,背景移动循环,改变地图颜色
经过构思,游戏将分为两部分, 1,预览图,只负责展示世界形势 2,根据预览图生成的战役项 现在要记录的是我制作预览图的部分 1.预览图只有实际地图的1/4,首先生成地图(建议不要缩放以前地图,由于误差 ...
- ArrayList中元素去重问题
如题所示,如果一个ArrayList中包含多个重复元素,该如何去重呢? 思路一以及实现: 声明2个ArrayList,分别为listA与listB ,listA为待去重list ,listB 保存去重 ...
- java ArrayList去重
对list集合中的重复值进行处理,大部分是采用两种方法, 一种是用遍历list集合判断后赋给另一个list集合, 另一种是用赋给set集合再返回给list集合. 方法1:set集合去重,不打乱顺序 L ...
- ArrayList去重
1.利用HashSet(不保证元素顺序一致) HashSet不会存在相同的元素,可以利用这一点去除List中的重复元素 List<String> beforeList = new Arra ...
- java 集合 HashSet 实现随机双色球 HashSet addAll() 实现去重后合并 HashSet对象去重 复写 HashCode()方法和equals方法 ArrayList去重
package com.swift.lianxi; import java.util.HashSet; import java.util.Random; /*训练知识点:HashSet 训练描述 双色 ...
- Java ArrayList对象集合去重
import java.util.ArrayList; import java.util.Iterator; public class StringSampleDemo { public static ...
- 30.2 案例:ArrayList本身数据可以重复,写出去重的方法
package day30_HashSet; /* * ArrayList特点(实现List接口) 有序.可以重复.可以使用索引 *使用ArrayList实现数据去重 * */ import java ...
随机推荐
- 纯css画三角形,勾等形状
//三角形 .money-ul li.active:after { content: ""; position: absolute; bottom: 0; right: 0; bo ...
- sql server query to get the list of column name in a table
--SQL Server 2005, 2008 or 2012: SELECT * FROM information_schema.tables --SQL Server 2000: SELECT * ...
- CSS3动画功能
1.transition功能 transition属性的使用方法:transition:property duration timing-function; 其中property表示对哪个属性进行平滑 ...
- 移动端开发:iOS与Android平台上问题列表
要CSS伪类 :active 生效,只需要给 document 绑定 touchstart 或 touchend 事件 <style> a { color: #000; } a:activ ...
- mongoDB BI 分析利器 - PostgreSQL FDW (MongoDB Connector for BI)
背景 mongoDB是近几年迅速崛起的一种文档型数据库,广泛应用于对事务无要求,但是要求较好的开发灵活性,扩展弹性的领域,. 随着企业对数据挖掘需求的增加,用户可能会对存储在mongo中的数据有挖掘需 ...
- Python爬虫编程常见问题解决方法
Python爬虫编程常见问题解决方法: 1.通用的解决方案: [按住Ctrl键不送松],同时用鼠标点击[方法名],查看文档 2.TypeError: POST data should be bytes ...
- mysql主键问题
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/qq_22314145/article/details/80824660 MySQL主键 一. MyS ...
- C++的extern关键字
extern是一个声明,不是一个定义,A模块想应用B模块的一个函数或者变量,A模块包含B模块的头文件,并且在变量或者头文件前,加 extern,虽然编译的时候,找不到模块的定义,但是在连接的时候,会在 ...
- 贝叶斯网络(Bayesian network))简介(PRML第8.1节总结)概率图模型(Graphical models)
转:http://www.cnblogs.com/Dzhouqi/p/3204353.html 部分图为手写,由于本人字很丑,望见谅,只是想把PRML书的一些部分总结出来,给有需要的人看,希望能帮到一 ...
- 常规渗透:没遇到过的anquan狗
0x01 信息收集 服务器信息: windows 2003 + IIS 6.0 + aspx . Php + 安全狗 站点cms信息:一套aspx新闻发布系统 和 Discuz X3 端口信息 : 服 ...