在《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<Student> list = new LinkedList<Student>();
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<Integer> list = new LinkedList<Integer>();
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中LinkedList的fori和foreach效率比较的更多相关文章

  1. Java中ArrayList的fori和foreach效率比较

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

  2. 转载-Java中LinkedList的一些方法—addFirst addFirst getFirst geLast removeFirst removeLast

    Java中LinkedList的一些方法—addFirst addFirst getFirst geLast removeFirst removeLast 版权声明:本文为博主原创文章,遵循CC 4. ...

  3. java 中LinkedList的学习

    Java中,所有链表实际上都是双向链表的,即每个结点还存放在着指向前驱结点的引用. LinkedList中的contains方法检测某个元素是否出现在链表中. LinkedList类提供了一个用来访问 ...

  4. 浅谈Java中linkedlist和arraylist区别

    在Java中,关于集合框架有这样一个体系结构: 其主要由两个接口派生而出:Collection和Map,然后再衍生出各自的一些实现类(比如Collection接口又被继承与Set和List接口,而他们 ...

  5. Java中的可变参数以及foreach语句

    Java中的可变参数的定义格式如下: 返回值类型  方法名称(类型 ... 参数名称){} foreach语句的格式如下: for ( 数据类型  变量名称 :数据名称){ ... } public ...

  6. Java中LinkedList的remove方法真的耗时O(1)吗?

    这个问题其实来源于Leetcode的一道题目,也就是上一篇日志 LRU Cache.在使用LinkedList超时后,换成ArrayList居然AC了,而问题居然是在于List.remove(Obje ...

  7. Java中的增强 for 循环 foreach

    foreach 是 Java 中的一种语法糖,几乎每一种语言都有一些这样的语法糖来方便程序员进行开发,编译期间以特定的字节码或特定的方式来对这些语法进行处理.能够提高性能,并减少代码出错的几率.在 J ...

  8. java中多种写文件方式的效率对比实验

    一.实验背景 最近在考虑一个问题:“如果快速地向文件中写入数据”,java提供了多种文件写入的方式,效率上各有异同,基本上可以分为如下三大类:字节流输出.字符流输出.内存文件映射输出.前两种又可以分为 ...

  9. java中LinkedList源码分析

    ArrayList是动态数组,其实本质就是对数组的操作.那么LinkedList实现原理和ArrayList是完全不一样的.现在就来分析一下ArrayList和LinkeList的优劣吧LinkedL ...

随机推荐

  1. spring源码学习(一):eclipse导入spring源码

    前言 对于一门技术,我们最先是了解它(what),然后再熟练的使用它(how)以及何时用它(when),最后肯定要看透它(why).spring作为Java开发人员可以说是最熟悉不过的了,基本每个Ja ...

  2. SSIS 变量、参数和表达式

    动态包对象包括变量,参数和表达式.变量主要为包提供一种对象之间相互通信的方法,变量的值是可以更新的.而参数不同于变量,参数的值在包中是不能修改的,只能通过外部来设置参数.表达式可以引用变量.参数.常量 ...

  3. 轻量级企业私有云 JimV 分享

    当前云市场分析 云分两种,公有云.私有云.目前市面上的云产品,对于中小规模的企业来讲,痛点有如下几点: 私有云: 1.VMware ESXi 类: a) 授权费用昂贵: b) 创建虚拟机费时费力: 2 ...

  4. net 快速打印日志

    System.IO.File.AppendAllText(@"F:WriteText.txt", "日志内容“+"\r\n");

  5. 15-RUN vs CMD vs ENTRYPOINT

    RUN.CMD 和 ENTRYPOINT 这三个 Dockerfile 指令看上去很类似,很容易混淆.本节将通过实践详细讨论它们的区别. 简单的说: RUN 执行命令并创建新的镜像层,RUN 经常用于 ...

  6. JUC——延迟队列

    所谓的延迟队列最大的特征是它可以自动通过队列进行脱离,例如:现在有一些对象被临时保存着,但是有可能该集合对象是一个公共对象,那么里面的某些数据如果不在使用的时候就希望其可以在指定的时间达到后自动的消失 ...

  7. gym100676 [小熊骑士限定]2015 ACM Arabella Collegiate Programming Contest

    Kuma Rider久违的第二场训练,这场很水,又在vj的榜单上看到第一场的大哥了,2小时ak,大哥牛啤! A.水 #include<cstdio> #include<iostrea ...

  8. Linux 磁盘与文件系统(EXT2)简介

    Linux 中,一切(或几乎一切)都是文件. 一.Linux 磁盘分区与文件系统 1.1 磁盘分区 磁盘的分区主要分为主分区和扩展分区 1)主分区:总共最多只能有四个主分区: 2)扩展分区:只能有一个 ...

  9. 机器学习基础 --- pandas的基本使用

    一.pandas的简介 Python Data Analysis Library 或 pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的.Pandas 纳入了大量库和一些 ...

  10. JS页面出现Uncaught SyntaxError: Unexpected token < 错误

    action中的查询方法的返回值应该为NONE;