面试被问及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的去重问题的更多相关文章

  1. List集合对象去重及按属性去重的8种方法-java基础总结系列第六篇

    最近在写一些关于java基础的文章,但是我又不想按照教科书的方式去写知识点的文章,因为意义不大.基础知识太多了,如何将这些知识归纳总结,总结出优缺点或者是使用场景才是对知识的升华.所以我更想把java ...

  2. springboot集成elasticsearch

    在基础阶段学习ES一般是首先是 安装ES后借助 Kibana 来进行CURD 了解ES的使用: 在进阶阶段可以需要学习ES的底层原理,如何通过Version来实现乐观锁保证ES不出问题等核心原理: 第 ...

  3. 18.libgdx制作预览图,背景移动循环,改变地图颜色

    经过构思,游戏将分为两部分, 1,预览图,只负责展示世界形势 2,根据预览图生成的战役项 现在要记录的是我制作预览图的部分 1.预览图只有实际地图的1/4,首先生成地图(建议不要缩放以前地图,由于误差 ...

  4. ArrayList中元素去重问题

    如题所示,如果一个ArrayList中包含多个重复元素,该如何去重呢? 思路一以及实现: 声明2个ArrayList,分别为listA与listB ,listA为待去重list ,listB 保存去重 ...

  5. java ArrayList去重

    对list集合中的重复值进行处理,大部分是采用两种方法, 一种是用遍历list集合判断后赋给另一个list集合, 另一种是用赋给set集合再返回给list集合. 方法1:set集合去重,不打乱顺序 L ...

  6. ArrayList去重

    1.利用HashSet(不保证元素顺序一致) HashSet不会存在相同的元素,可以利用这一点去除List中的重复元素 List<String> beforeList = new Arra ...

  7. java 集合 HashSet 实现随机双色球 HashSet addAll() 实现去重后合并 HashSet对象去重 复写 HashCode()方法和equals方法 ArrayList去重

    package com.swift.lianxi; import java.util.HashSet; import java.util.Random; /*训练知识点:HashSet 训练描述 双色 ...

  8. Java ArrayList对象集合去重

    import java.util.ArrayList; import java.util.Iterator; public class StringSampleDemo { public static ...

  9. 30.2 案例:ArrayList本身数据可以重复,写出去重的方法

    package day30_HashSet; /* * ArrayList特点(实现List接口) 有序.可以重复.可以使用索引 *使用ArrayList实现数据去重 * */ import java ...

随机推荐

  1. Ubuntu 下 /etc/resolv.conf文件总是自动清除问题的解决方案

    最近学习Linux,在虚拟机中安装的是Ubuntu操作系统,用了几天发现Ubuntu无法上网,打开命令终端,输入命令: ping www.baidu.com -c2 结果显示名称无法识别,而直接与宿主 ...

  2. 安装、配置Jupyter Notebook快速入门教程

    What? Why? How? ---安装 ---启动 ---关闭 ---保存 Markdown语法 Magic关键词 转换notebook--toHTML 创建幻灯片 运行代码 What? 文字化编 ...

  3. sql语句查询一个表里面无重复并且按照指定字段排序的sql语句

    SELECT a.* FROM product_template a INNER JOIN (SELECT p_id,MAX(ID) as max_id FROM product_template w ...

  4. springmvc/springboot处理前台字符串日期自动转换成后台date类型的三种办法

    参考https://blog.csdn.net/eumenides_/article/details/79033505 补充一个:Formatter也可以实现.

  5. C# 导出excel文件处理科学计数法办法

    在邦定gridview控件时在rowdatabound事件中队数据格式化 protected void DataGridView1_RowDataBound(object sender, GridVi ...

  6. Java 调用 Rest api 设置经典 Linux 虚拟机的实例启停

    现象描述 用户可以通过 Rest API 设置经典 Linux 虚拟机实例的启停.在调用该 API 时需要通过 Azure Active Directory(下文简称 AAD) 获取 Token,但是 ...

  7. golang rest api example

    package main import ( "net/http" "github.com/gin-gonic/gin" "github.com/jin ...

  8. 树的各种操作java

    package mystudy; import java.io.UnsupportedEncodingException; import java.util.LinkedList; import ja ...

  9. Redis 优化之 tcp-backlog

    默认值 511 tcp-backlog:511 此参数确定了TCP连接中已完成队列(完成三次握手之后)的长度, 当然此值必须不大于Linux系统定义的/proc/sys/net/core/somaxc ...

  10. js 联动实现日期选择,一般用作生日

    实现目标:年月日三个select 输入框,以及一个hidden的input,通过js获取input的值,如果有值切是日期格式,年月日select为input中的时间.否则为空.年默认区间段为1900年 ...