Java中LinkedList的fori和foreach效率比较
在《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效率比较的更多相关文章
- Java中ArrayList的fori和foreach效率比较
1. list的元素为Integer [代码实例1] public static void main(String[] args) { List<Integer> list = new A ...
- 转载-Java中LinkedList的一些方法—addFirst addFirst getFirst geLast removeFirst removeLast
Java中LinkedList的一些方法—addFirst addFirst getFirst geLast removeFirst removeLast 版权声明:本文为博主原创文章,遵循CC 4. ...
- java 中LinkedList的学习
Java中,所有链表实际上都是双向链表的,即每个结点还存放在着指向前驱结点的引用. LinkedList中的contains方法检测某个元素是否出现在链表中. LinkedList类提供了一个用来访问 ...
- 浅谈Java中linkedlist和arraylist区别
在Java中,关于集合框架有这样一个体系结构: 其主要由两个接口派生而出:Collection和Map,然后再衍生出各自的一些实现类(比如Collection接口又被继承与Set和List接口,而他们 ...
- Java中的可变参数以及foreach语句
Java中的可变参数的定义格式如下: 返回值类型 方法名称(类型 ... 参数名称){} foreach语句的格式如下: for ( 数据类型 变量名称 :数据名称){ ... } public ...
- Java中LinkedList的remove方法真的耗时O(1)吗?
这个问题其实来源于Leetcode的一道题目,也就是上一篇日志 LRU Cache.在使用LinkedList超时后,换成ArrayList居然AC了,而问题居然是在于List.remove(Obje ...
- Java中的增强 for 循环 foreach
foreach 是 Java 中的一种语法糖,几乎每一种语言都有一些这样的语法糖来方便程序员进行开发,编译期间以特定的字节码或特定的方式来对这些语法进行处理.能够提高性能,并减少代码出错的几率.在 J ...
- java中多种写文件方式的效率对比实验
一.实验背景 最近在考虑一个问题:“如果快速地向文件中写入数据”,java提供了多种文件写入的方式,效率上各有异同,基本上可以分为如下三大类:字节流输出.字符流输出.内存文件映射输出.前两种又可以分为 ...
- java中LinkedList源码分析
ArrayList是动态数组,其实本质就是对数组的操作.那么LinkedList实现原理和ArrayList是完全不一样的.现在就来分析一下ArrayList和LinkeList的优劣吧LinkedL ...
随机推荐
- 阿超的烦恼 javaScript篇
幼儿园级1-100随机数运算 实现目标 1.点击随机生成两个数并进项随机的四则运算. 2.答案暂时隐藏,等孩子做完题后点击答案处显示答案. 3.背景设置的卡通些,激发孩子阅读兴趣........... ...
- castle.dynamicProxy学习笔记
目的: 可以将castle.dynamicProxy当成代码生成器,快速的生成自己想的代码.这个库经历了这么多年的测试,应该可以用了:D 概念: IInterceptor:拦截器 当方法(属性的本质是 ...
- [硬件配置]记录Ubuntu 14.04 下安装无线网卡驱动解决无法连接WiFi的过程
新电脑安装了Ubuntu 14.04,但是网络连接中只有以太网而没有WiFi的选项. 打开System Setting系统设置-Software&Updates软件&更新-Additi ...
- 简单3D翻页相册制作教程
3D效果看起来总是要比平面的图形看起来视觉效果要好的多,今天来教大家制作简单的3D翻页效果的视频. 视频预览链接:https://v.youku.com/v_show/id_XMzgxOTY5NzQz ...
- python3实现合并两个有序数组
很早就听同学和师兄经常说刷题很重要,然而编程能力一直都很渣的我最近才开始从leetcode的初级算法开始.今天遇到的这道题虽然很简单,因为是头一次用自己的方法速度还不错,特此记录一下,还大神们请不要嘲 ...
- Zabbix对接AD域
需要的信息:一个域账号密码,使用的端口:域名 1.先查看php是否安装了ldap模块 php –m (查看已安装的php模块) 若没有安装请参照“在已编译安装的PHP环境下安装LDAP模块”. ...
- [Paper Reading] Image Captioning using Deep Neural Architectures (arXiv: 1801.05568v1)
Main Contributions: A brief introduction about two different methods (retrieval based method and gen ...
- 笨办法学Python - 习题11-12: Asking Questions & Prompting People
目录 1.习题 11: 提问 2.习题 12: 提示别人 3.总结 1.习题 11: 提问 学习目标:了解人机交互场景,熟悉raw_input 的用法. 1.在 Python2.x 中 raw_inp ...
- [redis] 几种redis数据导出导入方式
环境说明: 172.20.0.1 redis源实例 172.20.0.2 redis目标实例 172.20.0.3 任意linux系统 一.redis-dump方式 1.安装redis-dump工具 ...
- Spring Bean注册解析(二)
在上文Spring Bean注册解析(一)中,我们讲解了Spring在注册Bean之前进行了哪些前期工作,以及Spring是如何存储注册的Bean的,并且详细介绍了Spring是如何解析 ...