在《Java中ArrayList的fori和foreach效率比较》中对ArrayList的两种循环方式进行了比较,本次对LinkedList的两种遍历方式进行效率的比较。

1. list的元素为自定义的对象

自定义的Student类

public class Student {

private String name;

private Integer age;

public Student(String name, Integer age) {

this.name = name;

this.age = age;

}

public String getName() {

return name;

}

public Integer getAge() {

return age;

}

}

【代码实例1】

public static void main(String[] args) {

List list = new LinkedList();

int maxNum = 100000;

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

list.add(new Student("student" + i, i));

}

//开始测试不同方式的for性能

int listSize = list.size();

String searchName = "student666";

boolean searchFlag = false;

//基本形式的for循环

long startTime1 = System.currentTimeMillis();

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

Student val = list.get(i);

if (searchName.equals(val.getName())) {

searchFlag = true;

}

}

long endTime1 = System.currentTimeMillis();

//foreach形式

long startTime2 = System.currentTimeMillis();

for (Student stu : list) {

if (searchName.equals(stu.getName())) {

searchFlag = true;

}

}

long endTime2 = System.currentTimeMillis();

//输出运行时间

System.out.println("fori: " + (endTime1 - startTime1));

System.out.println("forearch: " + (endTime2 - startTime2));

}

【运行结果】

fori: 28628

forearch: 10

2. list元素为Integer

【代码实例2】

public static void main(String[] args) {

List list = new LinkedList();

int maxNum = 10000;

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

list.add(i);

}

//开始测试不同方式的for性能

int listSize = list.size();

Integer searchVal = 66666;

boolean searchFlag = false;

//基本形式的for循环

long startTime1 = System.currentTimeMillis();

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

Integer val = list.get(i);

if (searchVal.equals(val)) {

searchFlag = true;

}

}

long endTime1 = System.currentTimeMillis();

//foreach形式

long startTime2 = System.currentTimeMillis();

for (Integer val : list) {

if (searchVal.equals(val)) {

searchFlag = true;

}

}

long endTime2 = System.currentTimeMillis();

//输出运行时间

System.out.println("fori: " + (endTime1 - startTime1));

System.out.println("forearch: " + (endTime2 - startTime2));

}

【运行结果】

fori: 55

forearch: 2

3. 结果分析及结论

从【代码实例1】和【代码实例2】的多次运行结果来看,fori的性能是远落后于foreach的性能。可以看出,当list为LinkedList的时候,建议使用foreach的方式来遍历,效率较高。以上结果是在上述代码的条件下得出的,仅供参考。

java for foreach 效率_Java中LinkedList的fori和foreach效率比较相关推荐

  1. java数组编译后_Java中数组和集合的foreach操作编译后究竟是啥

    [本文版权归微信公众号"代码艺术"(ID:onblog)所有,若是转载请务必保留本段原创声明,违者必究.若是文章有不足之处,欢迎关注微信公众号私信与我进行交流!] 今天和同事在关于 ...

  2. java final class 性能_java中final修饰基本变量后的效率问题

    今天无聊想看下我电脑一秒钟能从0加到多少,就写了这个东西 public class TestMultiThread { static volatile long index = 0; static b ...

  3. java list底层实现_java中linkedlist的底层实现

    详情请看上面的文章,以下是我的简单总结: 1.linkedlist可序列化.可克隆.可做队列和双端队列使用 2.linkedlist的底层实现是双向循环链表 3.linkedlist有两个私有属性,一 ...

  4. java stack 类 效率_Java中ArrayList、LinkedList、Vector、Stack的比较

    一.介绍 先回顾一下List的框架图 由图中的继承关系,可以知道,ArrayList.LinkedList.Vector.Stack都是List的四个实现类. AbstractList是一个抽象类,它 ...

  5. java linkedlist 查找_Java中LinkedList真的是查找慢增删快

    测试结果 废话不多说,先上测试结果.作者分别在ArrayList和LinkedList的头部.尾部和中间三个位置插入与查找100000个元素所消耗的时间来进行对比测试,下面是测试结果 (感谢@Hosa ...

  6. java for list i_Java中ArrayList的fori和foreach效率比较

    1. list的元素为Integer [代码实例1] public static void main(String[] args) { List list = new ArrayList(); int ...

  7. java中有没有栈_Java中堆和栈有什么区别

    stack 和 heep 都是内存的一部分stack 空间小,速度比较快, 用来放对象的引用heep 大,一般所有创建的对象都放在这里.栈(stack):是一个先进后出的数据结构,通常用于保存方法(函 ...

  8. java 基本类型 引用_java中 引用类型 和 基本类型 有何区别?

    栈与堆都是Java用来在Ram中存放数据的地方.与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆. Java的堆是一个运行时数据区,类的(对象从中分配空间.这些对象通过new.newa ...

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

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

最新文章

  1. Process.Start() 传递参数中有空格问题
  2. PHP秒杀系统全方位设计分析--转载
  3. 非IT人士的云栖酱油之行 (程序猿迷妹的云栖之行)
  4. java基础面试题整理(BAT)
  5. Linux下导出MySQL为SQL文件_在linux命令下导出导入.sql文件的方法
  6. Python爬虫之(一):爬虫简介
  7. css文本溢出 so easy~
  8. eval同时绑定两个值:通过String.Format给超链接中的两个参数赋值
  9. 单结晶体管的导电特性_【硬见小百科】二极管基础知识分类,应用,特性,原理,参数(二)...
  10. V-by-one 与lvds
  11. 揭秘:全球第一张云安全国际认证金牌得主
  12. QPS、TPS、吞吐量含义
  13. mysql触发器应用场景_MySQL触发器的使用场景及方法实例
  14. Spring cloud 和 Spring Boot 升级到F版和2.x遇到的问题。
  15. 考研调剂信息爬取,以“小木虫”为例
  16. JavaFX调用虚拟键盘
  17. 问题记录:Ubuntu中source运行.sh shell脚本报错:command not found 未找到命令
  18. mac删除global protect
  19. 华为电脑系统linux下载,华为操作系统openeuler去哪下载?官方下载ISO安装包
  20. matlab怎么发声,听听函数,看看声音--Matlab的sound()函数

热门文章

  1. 17 年安全界老兵,专注打造容器安全能行吗?
  2. 5分钟,带你了解不同类型的云计算!
  3. 轻松了解面试官心理!ElasticSearch写入数据的工作原理是什么? | 技术头条
  4. Spark SQL在100TB上的自适应执行实践
  5. java 数组数据类型_java基本数据类型和数组
  6. PLSQL查询字段为科学计数法,修正显示
  7. VScode 常用快捷键
  8. SpringMVC 集成 mybatisPlus
  9. 工作流实战_05_flowable 流程定义的挂起与激活
  10. SpringBoot入门到精通_第3篇 _应用组件分析