面试被问及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. 排序算法Nb三人组-快速排序

    核心思想: 将列表中第一个元素拿出来,放到一边,左右两个循环,左面的大于拿出来的数,就把他挪到右面, 右面的小于拿出来的数就把他放在左面,这是列表被第一个元素''分''为两个列表,在对两个列表进行同样 ...

  2. <Android Framework 之路>BootAnimation(2)

    前言 上一篇主要讲解了BootAnimation是从何而来,如何启动,从开机,到SurfaceFlinger服务起来,然后到执行开机动画,如果要深入的看里面的代码,是需要花一定的时间的,我们旨在了解大 ...

  3. UFW Essentials: Common Firewall Rules and Commands

    Introduction UFW is a firewall configuration tool for iptables that is included with Ubuntu by defau ...

  4. 07_Redis事务

    [简述] 事务是指一系列的操作步骤,着一些列的操作步骤,要么完全地执行,要不完全地不执行. 比如微博中: A用户关注了B用户,那么A的关注列表里就会有B用户,B用户的粉丝列表里就会有A用户. 这个关注 ...

  5. 【2014-08-23】Beyong Coding

        be a product engineer,not be a engineer 选择比努力更重要   just code it,code it ,until you make it 缺的不是i ...

  6. mysql5.7

    原文  http://imysql.com/2015/07/08/mysql-57-new-feature-part-3.shtml 主题 MySQL 本文将和大家一起分享下5.7的新特性,不过我们要 ...

  7. 配置管理SVN软件具体操作

    配置管理(SVN) CM:configuration management  配置管理人员 什么是SVN SVN --Subversion --是一个开放源代码的版本控制系统 --时下流行的有SVN和 ...

  8. 039条件变量同步(Condition)

    也是锁,这个锁多加了wait(),notify()唤醒一个进程,notifyall()唤醒全部进程方法,创建的时候默认是Rlock类型的锁,可以设置为lock类型的,默认就ok from random ...

  9. 如何在两个月的时间内发表一篇EI/SCI论文-我的时间管理心得

    在松松垮垮的三年研究生时期,要说有点像样的成果,也只有我的小论文可以谈谈了.可能有些厉害的角色研究生是丰富而多彩的,而大多数的同学在研究生阶段可能同我一样,是慢悠悠的渡过的,而且可能有的还不如我,我还 ...

  10. Motrix 全平台多功能下载工具[Windows、macOS、Linux]

    Motrix的界面很朴素,使用起来其实也很方便.点击左侧的「+」图标就可以添加下载任务,跟其他的下载工具没什么区别.暂停.恢复.查看.复制,这些功能都不缺.界面也挺好看的,下载速度还会提示在图标的角标 ...