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 -_-
分享到:
相关推荐
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这门语言,感觉到其对自己的工作效率有很大的提升,下面废话不多说,直接贴代码 #!/usr/bin/env python # -*- coding: utf-8 -*- if __name__ == '__main__': list = ['html', 'js', 'css', 'python...
从c/c++语言转向java开发,学习java语言list遍历的三种方法,顺便测试各种遍历方法的性能,测试方法为在ArrayList中插入1千万条记录,然后遍历ArrayList,发现了一个奇怪的现象,测试代码例如以下: package ...
tree,ArrayList的创建与遍历插入 面试时可能会用到哦 1、根据 根节点rootId创建treeSize个子节点的tree树 2、根据list及父节点 列出父节点下的所有子节点 ...不足之处望大家多多指教,方法效率有待提高,但是通俗易懂
List、Set、MapList与Set集合的区别List、Map、Set三个接口,存取元素时,各有什么特点SetListMapList、Set、Map遍历的实现先来个Employee实体类List遍历的三种方式Set遍历的两种方式Map的几种遍历 List与Set集合的...
主要介绍了Java8 Stream对两个 List 遍历匹配数据的优化处理操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
Java不同数据存储类型使用不同遍历方法效率研究 GitHub代码仓库 数据存储类型 ArrayList HashSet HashMap LinkedList 遍历方法 传统遍历方法 for(int i=0;i<list.size();i++) { String str = list.get(i); ... ...
而LinkedList是一个基于链表实现的List,它在插入和删除元素时效率比ArrayList高,但是随机访问元素则需要遍历链表,效率较低。 List接口常用的方法 1、void add(int index, E element):在指定索引位置插入元素。 2...
c#遍历的两种方式 for和foreach ... 但查询效率较高 Dictionary遍历方式: Dictionary<string> list = new Dictionary(); list.Add(d, 1); //3.0以上版本 foreach (var item in list) { Cons
三、联合使用list()、each()和while循环遍历数组。 这三种方法中效率最高的是使用foreach语句遍历数组。从PHP4开始就引入了foreach结构,是PHP中专门为遍历数组而设计的语句,推荐大家使用。先分别介绍这几种方法。...
顺序表是一种存储数据的线性结构,其特点是物理存储位置连续,可以通过下标直接访问元素,这使得顺序表的访问效率非常高。在C语言中,顺序表通常使用数组来实现。下面,我们将通过示例代码展示如何在C语言中建立和...
将list集合转为树形结构的工具类,只遍历两次即可完成,方便快捷,工具类的扩展性虽然不错,但是效率上好像没有阿里的fastjson这个工具快。
static inline void list_add(struct list_head *new, struct list_head *head)//传入要插入的节点和要插入的链表 { __list_add(new, head, head->next); } //从尾部插入 static inline void list_add_tail...
基于单链表实现线性表 List1 的典型操作(判空、判满、求表长、插入、删除、查找、修改、遍历、置空、普 通构造、拷贝构造、赋值运算符重载、析构),编写简单程序使用该线性表,测试和调试程序。 基于静态链表实现...
我们知道,hash的特点之一就是不允许有重复元素,即hash表中的元素都是唯一的。所以,我们的思路就是:先把第一个集合的所有元素都放进hashSet中,时间复杂度O(M);再把第二个集合中的元素放进hashSet中,如果有重复...
内核链表中只有指针域,维护起来更加方便,效率更高 2.使用 内核链表在内核中已经被实现,我们只需要调用其接口直接使用即可 内核链表的实现代码在内核源代码的list.h文件中 3.源代码分析 (1)节点...
分享给大家供大家参考,具体如下: ...3、联合使用list()、each()和while循环遍历数组,此用法使用较少,但list()函数使用非常多 直接看实例代码: <?php $arr1 = array('http://www.jinsanguo.com/','金三国',
遍历ArrayList时,使用随机访问(即,通过索引序号访问)效率最高 转数组:Integer[] newText = v.toArray(new Integer[v.size()]) Fail-Fast机制 fail-fast 机制是java集合(Collection)中的一种错误机制。当多个线程...
遍历:for 迭代 排序:Comparable Comparator Collections.sort() ArrayList:底层用数组实现的List 特点:查询效率高,增删效率低 轻量级 线程不安全 LinkedList:底层用双向循环链表 实现的List 特点:查询...