面试被问及arraylist的去重问题,现将自己想的两种解决方案写在下面

  1. /**
  2. * Description:
  3. * ClassName:Uniq
  4. * Package:com.syd.interview
  5. * Date:2018/7/3 18:59
  6. * Author: syd-fish
  7. */
  8. public class Uniq {
  9.  
  10. public static void main(String[] args) {
  11. List<String> stringList = generateRandom(100000);
  12.  
  13. long t1 = System.nanoTime();
  14. boolean flag = uniqSet(stringList);
  15. long t2 = System.nanoTime();
  16. if (flag){
  17. System.out.println("nanoTime-set = [" + (t2-t1)+ "]");
  18. }else{
  19. System.err.print("error");
  20. }
  21.  
  22. long t3 = System.nanoTime();
  23. boolean flag2 = uniqArrayList(stringList);
  24. long t4 = System.nanoTime();
  25. if (flag){
  26. System.out.println("nanoTime-ArrayList = [" + (t4-t3)+ "]");
  27. }else{
  28. System.err.print("error");
  29. }
  30.  
  31. }
  32.  
  33. private static List<String> generateRandom(int m){
  34. List<String> list = new ArrayList<String>();
  35. for (int i=0;i<m ; i++) {
  36. list.add("Monday");
  37. list.add("Tuesday");
  38. list.add("Wednesday");
  39. list.add("Thursday");
  40. list.add("Friday");
  41. list.add("Saturday");
  42. list.add("Sunday");
  43. list.add("January");
  44. }
  45. return list;
  46. }
  47. private static boolean uniqSet(List<String> stringList){
  48. Set<String> set = new HashSet<String>();
  49. boolean flag = true;
  50. for (String str : stringList){
  51. set.add(str);
  52. }
  53. if (8 == set.size()) {
  54. flag = true;
  55. }else {
  56. flag = false;
  57.  
  58. }
  59. return flag;
  60. }
  61.  
  62. private static boolean uniqArrayList(List<String> stringList){
  63. List<Object> list = new ArrayList<Object>();
  64. Iterator it = stringList.iterator();
  65. boolean flag;
  66. while (it.hasNext()){
  67. Object str = it.next();
  68. if (!list.contains(str)){
  69. list.add(str);
  70. }
  71. }
  72. if (8 == list.size()) {
  73. flag = true;
  74. }else {
  75. flag = false;
  76.  
  77. }
  78. return flag;
  79. }
  80. }

当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. JS Event 鼠标拖拽事件

    <!DOCTYPE html><html> <head>        <meta charset="UTF-8">         ...

  2. CentOS使用fdisk扩展磁盘空间

    使用情况: 1. 虚拟机配置150G硬盘,初始化为/dev/sdb1,后因为磁盘空间不够使用,动态扩容至300G,扩容完成后,想要动态扩容/dev/sdb1分区. 2. 磁盘空间300G,之前分区只划 ...

  3. margin的auto的理解 top,left[,bottom,right] position

    auto auto 总是试图充满父元素 margin有四个值: All the margin properties can have the following values: auto - the ...

  4. 【转】ubunt 安装 yum出现 ubuntu 解决“无法获得锁 /var/lib/dpkg/lock -open (11:资源暂时不可用)”的方法

    今天本来是用xshell 链接本地的linux的,然而链接的时候没有主动弹出输入 用户名和密码的对话框,google搜了下,遇到了上面的问题. 解决办法如下:1.终端输入 ps  aux ,列出进程. ...

  5. Android学习——Service(一)

    这篇博文来介绍Android另一个十分重要的组件,Service.Service和Activity很类似,区别在于它运行在后台,不可见且没有界面.Service的优先级高于Activity,当系统负载 ...

  6. Python unittest模块心得(二)

    基础概念介绍请参看: http://www.cnblogs.com/frost-hit/p/8295818.html 组织测试用例 unittest.TestSuite(tests=()): 除了使用 ...

  7. Java API 常用 详解

    Runtime类的使用:可以查看内存信息,系统变量,执行系统软件命令,备份数据库相关操作

  8. 使用Powershell 管理 Windows 2012 hyper-v复制

    HyperV复制相关命令 Suspend-VMReplication Suspends replication of a virtual machine. 暂停复制虚拟机. Resume-VMRepl ...

  9. GCC the GNU

         GCC简单使用 -v/-v/--version 查看gcc版本号 python@ubuntu:~$ gcc -v -I 指定头文件目录,注意-I和之间没有空格 1 #include<s ...

  10. ZT自贴吧 说说你是怎么和恋人确定恋爱关系的?

    http://www.baidu.com/link?url=svJFMqibXXhJUiGDaDr1obOyrIb9o0TqO5JWFtMuM-l7ndaRlGMyuRQKCOHh-Pj0