`
trydofor
  • 浏览: 145528 次
  • 性别: 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 -_-

 

 

分享到:
评论

相关推荐

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

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

    tree的创建与遍历

    tree,ArrayList的创建与遍历插入 面试时可能会用到哦 1、根据 根节点rootId创建treeSize个子节点的tree树 2、根据list及父节点 列出父节点下的所有子节点 ...不足之处望大家多多指教,方法效率有待提高,但是通俗易懂

    List、Set、Map的特点及遍历方法

    List、Set、MapList与Set集合的区别List、Map、Set三个接口,存取元素时,各有什么特点SetListMapList、Set、Map遍历的实现先来个Employee实体类List遍历的三种方式Set遍历的两种方式Map的几种遍历 List与Set集合的...

    Java8 Stream对两个 List 遍历匹配数据的优化处理操作

    主要介绍了Java8 Stream对两个 List 遍历匹配数据的优化处理操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

    Java数据存储类型ArrayList、HashSet、HashMap、LinkedList使用不同遍历方法效率研究By Python

    Java不同数据存储类型使用不同遍历方法效率研究 GitHub代码仓库 数据存储类型 ArrayList HashSet HashMap LinkedList 遍历方法 传统遍历方法 for(int i=0;i&lt;list.size();i++) { String str = list.get(i); ... ...

    Java集合框架List接口.pdf

    而LinkedList是一个基于链表实现的List,它在插入和删除元素时效率比ArrayList高,但是随机访问元素则需要遍历链表,效率较低。 List接口常用的方法 1、void add(int index, E element):在指定索引位置插入元素。 2...

    C# Dictionary的遍历和排序

    c#遍历的两种方式 for和foreach ... 但查询效率较高  Dictionary遍历方式: Dictionary&lt;string&gt; list = new Dictionary(); list.Add(d, 1); //3.0以上版本 foreach (var item in list) { Cons

    PHP遍历数组的几种方法

    三、联合使用list()、each()和while循环遍历数组。 这三种方法中效率最高的是使用foreach语句遍历数组。从PHP4开始就引入了foreach结构,是PHP中专门为遍历数组而设计的语句,推荐大家使用。先分别介绍这几种方法。...

    顺序表的建立及遍历含C语言示例.docx

    顺序表是一种存储数据的线性结构,其特点是物理存储位置连续,可以通过下标直接访问元素,这使得顺序表的访问效率非常高。在C语言中,顺序表通常使用数组来实现。下面,我们将通过示例代码展示如何在C语言中建立和...

    list转树形结构工具类

    将list集合转为树形结构的工具类,只遍历两次即可完成,方便快捷,工具类的扩展性虽然不错,但是效率上好像没有阿里的fastjson这个工具快。

    C语言的单链表

    static inline void list_add(struct list_head *new, struct list_head *head)//传入要插入的节点和要插入的链表 { __list_add(new, head, head-&gt;next); } //从尾部插入 static inline void list_add_tail...

    数据结构实验-实验一线性数据结构的实现与应用

    基于单链表实现线性表 List1 的典型操作(判空、判满、求表长、插入、删除、查找、修改、遍历、置空、普 通构造、拷贝构造、赋值运算符重载、析构),编写简单程序使用该线性表,测试和调试程序。 基于静态链表实现...

    求2个集合的交集

    我们知道,hash的特点之一就是不允许有重复元素,即hash表中的元素都是唯一的。所以,我们的思路就是:先把第一个集合的所有元素都放进hashSet中,时间复杂度O(M);再把第二个集合中的元素放进hashSet中,如果有重复...

    C语言的双链表

    内核链表中只有指针域,维护起来更加方便,效率更高 2.使用 内核链表在内核中已经被实现,我们只需要调用其接口直接使用即可 内核链表的实现代码在内核源代码的list.h文件中 3.源代码分析 (1)节点...

    PHP中遍历数组的三种常用方法实例分析

    分享给大家供大家参考,具体如下: ...3、联合使用list()、each()和while循环遍历数组,此用法使用较少,但list()函数使用非常多 直接看实例代码: &lt;?php $arr1 = array('http://www.jinsanguo.com/','金三国',

    java8源码-csn-list:ArrayList、LinkedList、Vector、Stack源码分析

    遍历ArrayList时,使用随机访问(即,通过索引序号访问)效率最高 转数组:Integer[] newText = v.toArray(new Integer[v.size()]) Fail-Fast机制 fail-fast 机制是java集合(Collection)中的一种错误机制。当多个线程...

    java集合详解与总结

    遍历:for 迭代 排序:Comparable Comparator Collections.sort() ArrayList:底层用数组实现的List 特点:查询效率高,增删效率低 轻量级 线程不安全 LinkedList:底层用双向循环链表 实现的List 特点:查询...

Global site tag (gtag.js) - Google Analytics