`
yeelor
  • 浏览: 413986 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

遍历 List 之效率

    博客分类:
  • Java
 
阅读更多

原文地址:http://my.oschina.net/trydofor/blog/9974

 

 

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...

    C#遍历List并删除某个元素的方法

    当我们需要遍历List并根据条件删除特定元素时,需要注意正确的方法,以避免在遍历过程中出现错误。以下将详细介绍如何在C#中遍历List并删除元素,包括正序和倒序遍历的技巧。 首先,我们来看一下错误的遍历方式。...

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

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

    list遍历集合源码

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

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

    不同之处在于它首先将`chks.length`的值赋给一个变量`length`,这样在循环内部就不需要重复访问`length`属性,从而可能提高性能。 #### 3. 性能考量 在这段代码中,作者通过记录每次遍历前后的时间差来评估每种方法...

    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 #{...

    c标签遍历集合嵌套的List集合

    ### c标签遍历集合嵌套的List集合 在Java Web开发中,经常需要处理复杂的集合数据结构,并将其展示到前端页面上。对于嵌套的集合(例如:List中包含List),使用`c`标签库(JSTL)进行遍历是一种常见的做法。本文将...

    关于checkboxlist的绑定和遍历checkboxlist

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

    java中List对象集合的遍历方法(三个)

    遍历List对象集合是日常开发中常见的操作,这里我们将详细介绍三种遍历List的方法,并探讨它们的性能特点和适用场景。 ### 第一种:迭代器(Iterator)遍历 ```java for (Iterator&lt;A&gt; it = list.iterator(); it....

    火山pc 文件遍历的解决方案

    火山PC文件遍历的解决方案主要关注的是在...总的来说,火山PC文件遍历的解决方案涉及到计算机系统底层的文件系统操作、编程技巧以及效率和安全性的考量。理解并掌握这些知识点对于开发涉及文件处理的软件至关重要。

    Java中List集合的遍历实例详解

    在实际编程中,遍历List集合是常见的需求,用于访问和处理集合中的每个元素。本篇文章将详细介绍Java中List集合的三种遍历方式及其特点。 1. **迭代器(Iterator)遍历** 迭代器是Java集合框架提供的标准遍历接口...

    遍历字典独家for

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

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

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

    jstl 遍历_jstl遍历_

    例如,`&lt;c:forEach&gt;`标签是用于遍历集合的,它是JSTL中最常用的标签之一。 **2. `&lt;c:forEach&gt;`标签** `&lt;c:forEach&gt;`标签用于遍历任何可迭代的数据源,如ArrayList、LinkedList、HashMap等。其基本语法如下: ```...

    遍历页面控件换CSS

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

    java-遍历map

    在Java编程语言中,`Map`接口是一...总之,遍历`Map`是Java编程中常见的需求之一,掌握正确的遍历方法不仅可以提高代码的效率,还可以避免潜在的错误。希望本文的内容能帮助你更好地理解和使用Java中的`Map`遍历技巧。

    javaList用法

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

    数据结构之图的遍历算法

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

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

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

Global site tag (gtag.js) - Google Analytics