`
trydofor
  • 浏览: 147212 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

遍历 List 之效率

阅读更多

1. 常用遍历 List 之方法

 

遍历 List 方法有三:

a) for (Iterator iterator = ls.iterator(); iterator.hasNext();)

b) for (int i = 0; i < ls.size(); i++)

c) for (Object object : ls) (java5+)

常用 List 实现有二:

a) java.util.ArrayList

b) java.util.LinkedList

 

效率如何?

 

2. 遍历方法之小误差验证

 

输出

class java.util.ArrayList
iterator-nanotime :7199195
arraylike-nanotime:1920143
foreach-nanotime :3775320
class java.util.LinkedList
iterator-nanotime :5430188
arraylike-nanotime:9148595046
foreach-nanotime :1677620
 

方法

 

private static void nanoLoop(List ls){
	System.out.println(ls.getClass());
	{ // iterator
		long b = System.nanoTime();
		for (Iterator iterator = ls.iterator(); iterator.hasNext();) {
			Object object = (Object) iterator.next();
		}
		System.out.println("iterator-nanotime :"+(System.nanoTime()-b));
	}
	
	{ // array-like
		long b = System.nanoTime();
		for (int i = 0; i < ls.size(); i++) {
			Object object = (Object) ls.get(i);
		}
		System.out.println("arraylike-nanotime:"+(System.nanoTime()-b));
	}
	
	{ // foreach
		long b = System.nanoTime();
		for (Object object : ls) {
			Object s = (Object) object;
		}
		System.out.println("foreach-nanotime  :"+(System.nanoTime()-b));
	}
}

private static List initList(List ls,int count){
	for (int i = 0; i < count; i++) {
		ls.add("aaaa");
	}
	return ls;
}

public static void main(String[] args) {
	nanoLoop(initList(new ArrayList(),10*10000));
	nanoLoop(initList(new LinkedList(),10*10000));
}
 

 

3. 鲁莽结论

 

 * 黑盒情况下:foreach > iterator > arraylike

 * ArrayList :arraylike>foreach >iterator

 * LinkedList:foreach >iterator >>>arraylike

 


4. 刨根问底

 

read the fk source code -_-

 

 

分享到:
评论

相关推荐

    FreeMarker 遍历list

    在FreeMarker中,遍历`List&lt;Map&lt;String&gt;&gt;`是常见的操作,尤其在处理从后端传来的复杂数据结构时。这篇博客链接虽然无法直接访问,但从标题来看,我们可以推测其内容可能涉及如何在FreeMarker模板中遍历一个包含Map...

    list遍历集合源码

    为了遍历List,Java提供了一种迭代器(Iterator)的方式。ListIterator是Iterator的子接口,专为List设计,除了基本的`hasNext()`和`next()`方法外,还提供了`previous()`,`nextIndex()`和`previousIndex()`等方法,...

    java遍历list集合3种方式和性能对比

    在Java编程中,遍历List集合是常见的操作,有多种方式可以实现这一功能。下面将详细探讨三种遍历List集合的方法及其性能差异。 1. 使用`Iterator`遍历: ```java List list = new ArrayList(); // 添加元素 for ...

    Struts2 iterator 标签遍历 Map,List,数组(三十六)

    接下来,我们讨论如何遍历List。List是一种有序的集合,`iterator`标签通过`status`属性可以提供迭代状态信息,如当前元素的索引等。假设我们有一个名为`myList`的List,我们可以这样遍历: ```jsp &lt;p&gt;Item #{...

    js中三种遍历数组的效率.txt

    var fun2=function(obj) {//第二种 var chks=g("box").getElementsByTagName("input"); var b=!chks[0].checked; var d=new Date(); for(var i=0;chks[i];... chks[i].checked=b;... obj.nextSibling.innerHTML=new ...

    关于checkboxlist的绑定和遍历checkboxlist

    本文将深入探讨关于CheckBoxList的绑定和遍历的实现方法及其相关知识点。 一、CheckBoxList绑定 1. 数据源绑定: CheckBoxList的数据源可以是数组、列表、数据库查询结果等,通过DataSource属性设置数据源,然后...

    C# 集合对象遍历性能测试

    遍历List的时间复杂度与ArrayList相同,都是O(n),但由于类型安全,List通常被视为更优的选择。 最后,`DataSet`是.NET中用于存储和操作关系数据的复杂对象,它包含了多个DataTable。DataSet设计用于处理大量数据库...

    遍历字典独家for

    在实际编程中,根据具体需求选择合适的遍历方法,可以极大地提高代码的可读性和效率。记得,遍历字典并不局限于一种方式,灵活运用各种技巧能让你的代码更加优雅。在实践过程中,不断探索和尝试,你会发现更多有趣和...

    遍历文件夹自动生成目录树

    在IT领域,遍历文件夹并自动生成目录树是一项常用的任务,特别是在文件管理、数据整理以及自动化脚本编写中。这个过程通常涉及到操作系统...通过了解这些基础知识,你可以更有效地管理和操作文件系统,提高工作效率。

    遍历页面控件换CSS

    例如,通过使用CSS选择器来定位特定类型的控件,或者只遍历那些需要修改样式的元素,可以提高代码效率。 总结来说,“遍历页面控件换CSS”是一个在网页开发中调整样式的重要技术,它结合了遍历DOM元素和动态修改CSS...

    Python 列表(List) 的三种遍历方法实例 详解

    最近学习python这门语言,感觉到其对自己的工作效率有很大的提升,下面废话不多说,直接贴代码 #!/usr/bin/env python # -*- coding: utf-8 -*- if __name__ == '__main__': list = ['html', 'js', 'css', 'python...

    Java list三种遍历方法性能比较

    从c/c++语言转向java开发,学习java语言list遍历的三种方法,顺便测试各种遍历方法的性能,测试方法为在ArrayList中插入1千万条记录,然后遍历ArrayList,发现了一个奇怪的现象,测试代码例如以下: package ...

    javaList用法

    ArrayList 是一种基于数组的 List 实现类,它提供了快速的随机访问能力,但是插入和删除元素时需要移动大量元素,效率较低。LinkedList 是一种基于链表的 List 实现类,它提供了快速的插入和删除能力,但是随机访问...

    数据结构之图的遍历算法

    例如,使用STL库中的`vector`或`list`容器来表示邻接表,使用`queue`或`stack`容器来进行DFS和BFS的遍历。同时,为了跟踪已访问过的节点,可以创建一个布尔数组或利用`std::set`来存储已访问的顶点。 在实际应用中...

    java集合遍历的几种方式总结及详细比较

    Java中提供了多种集合遍历方式,包括迭代器遍历、Map遍历、List遍历等。下面我们将逐一介绍这些遍历方式的实现原理和优缺点。 一、迭代器遍历 迭代器遍历是Java中最基本的集合遍历方式。迭代器是一个对象,它允许...

    线程遍历文件下文件

    在遍历大量文件时,可以考虑使用异步I/O或者线程池来进一步提升效率,避免创建过多的线程导致资源浪费。 8. **安全性**: 访问文件系统时应考虑到安全问题,避免遍历敏感目录,或者执行对文件的不必要操作,防止...

    遍历磁盘目录.rar

    在Java中,可以利用`java.io.File`类的`list()`或`listFiles()`方法遍历目录,如果需要递归遍历,可以使用递归函数。 遍历目录时,需要注意几个关键点: 1. **权限**:访问某些目录可能需要特定的权限,因此在遍历...

    List,Set和Map遍历读取[归类].pdf

    下面将详细讲解如何遍历List、Set和Map这三种类型的集合。 1. **List遍历** List是一个有序的集合,允许重复元素,可以通过索引来访问。Java提供了两种主要的遍历方式: - **方法一:使用迭代器** ```java ...

    遍历文件

    在IT行业中,遍历文件是一项基础且重要的任务,它涉及到文件系统的操作以及程序对文件的访问。本篇文章将深入探讨如何在不同的...在实际应用中,我们还需要考虑错误处理、性能优化等细节,以确保代码的健壮性和效率。

    vb编程遍历Excel中所有单元格,读取出所有单元格内容

    * 在遍历单元格时,我们需要使用 For 循环来遍历每个单元格,以避免遍历的效率不高。 * 在读取单元格的值时,我们需要使用 Trim 函数来去除单元格中的空白字符,以避免读取错误。 * 在退出 Excel 进程时,我们需要...

Global site tag (gtag.js) - Google Analytics