面试被问及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。

转载于:https://www.cnblogs.com/syd-fish-cat/p/9260376.html

ArrayList的去重问题相关推荐

  1. ArrayList的去重、排序以及其他应用

    介绍了ArrayList集合去重的三种方式,以及排序的两种方式,以及反射获取ArrayList的容量,以及Array和ArrayList的区别. 文章目录 1 Array和ArrayList的区别以及 ...

  2. #笔记 如何对ArrayList进行去重、排序

    知识点巩固 首先明确两个点 ArraryList ArrayList虽然是有序的但它是按照存入顺序进行保存,并不是我们所想的排序: ArrayList<Integer> list = ne ...

  3. ArrayList数据去重的方法

    1.使用LinkedHashSet删除arraylist中的重复数据 LinkedHashSet是在一个ArrayList删除重复数据的最佳方法. LinkedHashSet在内部完成两件事: 1 删 ...

  4. Java ArrayList 实现去重

    对一份文件中的姓名去重后以列表形式输出: 文件内容: 代码实现: package Array_list_study; import java.util.*; import java.io.*; // ...

  5. java调用方法返回数组_JAVA使用下面的方法头编写方法,返回两个数组列表的并集...

    importjava.util.Set;importjava.util.List;importjava.util.HashSet;importjava.util.TreeSet;importjava. ...

  6. 功能中进行频繁查询、提高查询效率的方法

    我曾遇到过的情况需要将多个DO模型转换成VO模型,由于DO模型中存在着的是ID集合,需要转换成VO中的集合,每一个ID集合都要进行一次批量查询,难免会有重复的ID,每一次查询都进行一次IO,消耗的时间 ...

  7. 蚂蚁java一二三面面经

    蚂蚁java一面面经 1.自我介绍 2.项目 3.说说redis两种持久化的方式和特点 4.再说说缓存雪崩.缓存击穿缓存穿透,解决方法?redis为什么快?缓存淘汰策略? 5.说说springmvc一 ...

  8. Java集合之Set集合

    Set集合怎么使用呢? 目录 Set接口 特点: Set: 无序,不重复 (无序:存入和拿出来的顺序不同所以不能使用下标) 遍历: foreach , 迭代器 扩容: 初始容量 16 ,负载因子 0. ...

  9. 首字母排序侧边索引栏:WaveSideBar的简单使用

    参考 [WaveSideBar](https://github.com/gjiazhe/WaveSideBar) 场景 在Android开发中会经常用到侧边索引栏,并且根据中文的首字母排序.额..废话 ...

最新文章

  1. gensim中word2vec使用
  2. 以杨辉三角形的三种实现体会python的编程特性
  3. 云计算之KVM虚拟化实战
  4. 使用System Center DPM 2012 SP1保护企业关键数据(二)备份及恢复AD
  5. 剑指offer(26-33题)详解
  6. 操作系统服务:logging日志记录模块
  7. 面向对象——概念(成员变量、静态变量、成员方法、静态方法、垃圾回收机制、重载、包)...
  8. Oracle、Db2、SqlServer、MySQL 数据库插入当前系统时间
  9. Android 系统(38)---Android抓取各种log的方法
  10. 苹果关闭iOS 14.1验证通道,阻止 iOS 14.2 降级
  11. Node连接MySQL数据库进行基本的增删改查操作(一看就会)
  12. 《FPGA全程进阶---实战演练》第十一章 VGA五彩缤纷
  13. 带有行数和标尺的RichTextBox
  14. 在线旅游网站发展趋势分析
  15. 系统集成项目管理工程师(软考中级)知识点总结【挣值分析】【关键路径】
  16. OCR识别扫描版PDF文件(Python版)
  17. 基于stm32的两轮自平衡小车2(原理篇)
  18. C语言二维数组及指针引用
  19. HDU 6638 Snowy Smile(线段树)
  20. c语言转义字符c,C语言转义字符

热门文章

  1. 计算机考研 东华大学,东华大学(专业学位)计算机技术考研难吗
  2. 什么叫python设计模式_什么是Python设计模式
  3. python rest api client_Python py-jama-rest-client包_程序模块 - PyPI - Python中文网
  4. 语义分割和实例分割_2019 语义分割指南
  5. c mysql timeout_mysqltimeout知多少
  6. 相机模型与标定(十一)--LMEDS,M估计,RANSAC估计对比
  7. C++查漏补缺之流状态
  8. 用python开发的运维管理系统下载_GitHub - jiegangwu/OPMS_v3: 基于 Python 3.5 + Django 2.0 开发的运维管理系统...
  9. kill 进程_如果有个进程kill 9杀不掉,怎么办?
  10. cemtos7重置mysql root,Centos7重置MySQL8.0 root密码