今天看到网上一篇文章说:Set检索元素效率低下,删除和插入效率高;List查找元素效率高,插入删除元素效率低。于是想到List虽然用get(index)方法查询效率高,但是若用contains方法查询对象元素,Set集合应该比List效率要高,下面是实验证明操作过程。

实体类:

 Student

准备数据代码:

List list = new ArrayList();

Set set = new HashSet();

Student s = null;

for(int i = 0; i <= 100000; i++){

s = new Student("name"+i,"addr"+i);

list.add(s);

set.add(s);

}

查询第一个对象:

代码:

long start = System.currentTimeMillis();

Student stu = new Student("name0","addr0");

System.out.println(list.contains(stu));

// System.out.println(set.contains(stu));

long end = System.currentTimeMillis();

System.out.println("查询对象 "+stu.toString()+"\n共耗费时间:"+(end-start)+ "毫秒");

使用ArrayList查询结果结果:

使用HashSet查询结果:

查询第一个对象太简单了,它们都几乎不用花时间...

查询靠后的对象:

代码:

long start = System.currentTimeMillis();

Student stu = new Student("name100000","addr100000");

// System.out.println(list.contains(stu));

System.out.println(set.contains(stu));

long end = System.currentTimeMillis();

System.out.println("查询对象 "+stu.toString()+"\n共耗费时间:"+(end-start)+ "毫秒");

使用ArrayList查询结果结果:

使用HashSet查询结果:

HashSet快一些。。。

通过多次调用contains方法分别查询开头到结尾所有对象:

代码:

long start = System.currentTimeMillis();

for(int i = 0; i<= 100000; i++){

s = new Student("name"+i,"addr"+i);

System.out.println(i+"__"+list.contains(s));

// System.out.println(i+"__"+set.contains(s));

}

long end = System.currentTimeMillis();

System.out.println("查询10000个对象 \n共耗费时间:"+(end-start)+ "毫秒");

使用ArrayList查询结果结果:

;使用HashSet查询结果:

耗时前者是后者的167.46倍(打印代码中把100000写成10000了,但是不影响结果)

总结:使用contains方法查询元素是否存在HashSet要比ArrayList快的多。

java contains 效率_List与Set的contains方法效率问题相关推荐

  1. python最快的循环方法_【转】【Python效率】五种Pandas循环方法效率对比

    [Python效率]五种Pandas循环方法效率对比 - 文兄的文章 - 知乎 https://zhuanlan.zhihu.com/p/80880493 正文: 如果你使用过Python及Panda ...

  2. 循环下标_【转】【Python效率】五种Pandas循环方法效率对比

    [Python效率]五种Pandas循环方法效率对比 - 文兄的文章 - 知乎 https://zhuanlan.zhihu.com/p/80880493 正文: 如果你使用过Python及Panda ...

  3. java复制文件_java多种文件复制方式以及效率比较

    1.背景 java复制文件的方式其实有很多种,可以分为 - 传统的字节流读写复制FileInputStream,FileOutputStream,BufferedInputStream,Buffere ...

  4. java 数组效率_java数组复制的四种方法效率对比

    有关数组的基础知识,有很多方面,比方说初始化,引用,遍历,以及一维数组和二维数组,今天我们先看看数组复制的有关内容. 来源于牛客网的一道选择题: JAVA语言的下面几种数组复制方法中,哪个效率最高? ...

  5. 【020期】面试官问:Java 遍历 Map 集合有几种方式?效率如何?

    >>号外:关注"Java精选"公众号,回复"2021面试题",领取免费资料!"Java精选面试题"小程序,3000+ 道面试题在 ...

  6. java list 遍历效率_Java遍历List四种方法的效率对比

    Java遍历List的方法主要有: for eachjava for(bject o :list)node { 数组 }oop Iterator 性能 Iterator iter = list.ite ...

  7. Java里的堆(heap)栈(stack)和方法区(method)

    http://imiduo.iteye.com/blog/616310 Java里的堆(heap)栈(stack)和方法区(method)  <一> 基础数据类型直接在栈空间分配, 方法的 ...

  8. mybatis批量更新数据三种方法效率对比

    探讨批量更新数据三种写法的效率问题. 实现方式有三种, 1> 用for循环通过循环传过来的参数集合,循环出N条sql,需要在db链接url后面带一个参数  &allowMultiQuer ...

  9. 八、Java面向对象编程(类、对象、方法、重载、可变参数、作用域、构造器、this本质)

    文章目录 Java面向对象编程(类.对象.方法.重载.可变参数.作用域.构造器.this本质) 一.类与对象 1. 类与对象的引出 2. 使用现有技术解决 3. 现有技术解决的缺点分析 4. 类与对象 ...

  10. Java 中Int转String的三种方法

    JAVA 中int类型转String类型的三种通常方法: 1.String.valueOf(int i) 2.Integer.toString(int i) 3.i + ""; / ...

最新文章

  1. 纯数学教程 Page 203 例XLI (1)
  2. 出现了错误。详细消息: 3 uncommitted changes would be overwritten by merge
  3. 抖音只能上下滑动吗_抖音:如何靠评论,轻松涨粉十万
  4. Python学习笔记(三)数据类型--Number类型
  5. example datasets in sklearn
  6. 台式计算机文件打不开怎么回事,电脑文件打不开怎么回事
  7. c#操作txt文本之查询
  8. 机器学习读书笔记:样本降维
  9. 【VUE】微商城(十)----收货地址
  10. 徒步运动软件怎么申请测试,徒步,不仅是体质健康的锻炼和检测,还是心理健康成长的过程...
  11. 征服面试官的50道Redis高频通关面试题
  12. FlyThings OS:基于Linux实现现代化人机交互体验的新嵌入式操作系统
  13. Python趣味|为了追到小姐姐,我用 Python 制作了一个机器人
  14. C/C++实现学生成绩管理系统
  15. Visio中插入Mathtype公式
  16. 记一次小米2S的刷机过程
  17. linux中管道的概念,浅谈Linux管道
  18. Python手册(Python Basics)--Python进阶
  19. 计算机键盘无线遥控器实现方法,利用红外遥控器实现单片机键盘无线式操作
  20. SQL文件切割器 v0.00001

热门文章

  1. jmeter.results.shanhe.me.xsl
  2. system的用法,多样用法、有趣的system、关机自制
  3. 网站为什么要备案?网站备案流程是什么?
  4. 腾讯实习生面试经历及入职体验
  5. 小程序云开发点赞案例实现及环境vant插件配置等问题
  6. 详解GBase 8c数据库安全之数据透明加密
  7. My Fifty-Ninth 全排列Ⅱ - By Nicolas
  8. FLV player 在线播放器【www.lantianye3.top】
  9. 富媒体广告投放的一些经验
  10. 樊登读书搞定读后感_樊登读书法的读后感。