`

List 遍历方式-研究

阅读更多
今天看见网上有个List 遍历方式讨论贴见 http://pda158.iteye.com/blog/2158898

第一种方式遍历每次会生成句柄 所以比较慢,改进版代码如下:

 

import java.util.ArrayList; 
import java.util.Iterator; 
import java.util.List; 

public class ListTest { 

public static void main(String[] args)  { 
List<String> list = new ArrayList<String>(); 
long t1,t2; 
for(int j = 0; j < 800000; j++)  { 
list.add("aaaaaa" + j); 

System.out.println("List first visit method:"); 

// t1=System.currentTimeMillis(); 
// for(String tmp:list)  { 
//// tmp;
// } 
// t2=System.currentTimeMillis(); 
// System.out.println("List first visit Run Time:" + (t2 -t1) + "(ms)"); 
//
// System.out.println("List second visit method:"); 
// t1=System.currentTimeMillis(); 
// for(int i = 0; i < list.size(); i++)  { 
// String tmp = list.get(i);
// } 
// t2=System.currentTimeMillis(); 
// System.out.println("List second visit Run Time:" + (t2 -t1) + "(ms)"); 
//
System.out.println("List Third visit method:"); 
Iterator<String> iter = list.iterator(); 
t1=System.currentTimeMillis(); 
while(iter.hasNext())  { 
String tmp =iter.next(); 

t2=System.currentTimeMillis(); 
System.out.println(" List Third visit Run Time:" + (t2 -t1) + "(ms)"); 
System.out.println("Finished!!!!!!!!"); 



结果:
List first visit Run Time:35(ms)
List second visit Run Time:21(ms)
List Third visit Run Time:35(ms)

1 同样第二种方式快,因为它直接从List中取出数据
2 1,3方式差不多

解释:
1,3 方式,所以时间是差不多的
Java 中的 foreach 语法是 iterator(迭代器)的变形用法
for (Iterator<Integer> i = list.iterator(); i.hasNext();) { 

1,2 方式比较

public E next() { 
        checkForComodification(); 
        try { 
            E next = get(cursor); 
            lastRet = cursor++; 
            return next; 
        } catch (IndexOutOfBoundsException e) { 
            checkForComodification(); 
            throw new NoSuchElementException(); 
        } 
    } 


    在迭代器的  next() 方法中也出现了下标访问方式没有的 checkForComodification() 方法和 lastRet 变量赋值操作。这也就是通过 foreach 方式遍历耗时的原因。



分享到:
评论

相关推荐

    list遍历集合源码

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

    数据结构中图的深度优先遍历算法与实现.pdf

    图的深度优先遍历算法与实现是数据结构研究中的重要课题。图是一种复杂的数据结构,它能够存储和表达元素之间的复杂关系,图的存储和遍历相比线性表来说要复杂得多。图的遍历是图论和算法分析中的基本操作,它是其他...

    图的存储遍历拓扑排序

    9. **挑战与提高**:除了基础概念,还可以研究Kahn算法、Tarjan算法等拓扑排序的优化方法,以及如何在复杂图结构中应用图的遍历和排序。 总之,这个资源包提供了全面的图论学习材料,无论是对初学者还是进阶者,都...

    TO-GET-THE-LIST-OF-PROGRESS-.rar_progress

    在C++中,我们可以使用POSIX的`/proc`文件系统(在Linux中)或者Windows API如`CreateToolhelp32Snapshot`和`Process32First`来遍历进程列表。 在Java中,`java.lang.management.ManagementFactory`类提供了获取...

    FIle-and-list-compare-source.zip_source compare

    最后,`File and list compare code.zip`可能是一个包含源代码的压缩包,供开发者研究或扩展此工具的功能。可能包含了实现文件和目录比对的具体代码,以及任何必要的配置文件或示例数据。 总的来说,这个项目提供了...

    linked-list-reverse-output.rar_Reverse Linked List

    初始化时,previous和current都设置为head,而head通常由用户传入或通过其他方式获取。 接下来,我们进入一个循环,直到current为空(即遍历到链表末尾)。在每次循环中,我们做以下操作: 1. 保存当前节点的下一个...

    List-creation-process.rar_creation

    在IT领域,数据结构是计算机科学的基础,它们是组织和管理大量数据的有效方式。本话题主要聚焦于一种基本的数据结构——链表,以及如何用C语言实现链表的创建、插入和删除操作。C语言是一种底层编程语言,它允许直接...

    linux链表详解

    链表的核心数据结构`struct list_head`包含了两个`struct list_head *`类型的指针,分别指向前后相邻的链表节点,从而支持双向遍历。 值得注意的是,Linux内核的链表结构并不直接包含数据,而是嵌入到具体的数据...

    Duilib列表控件ListEx扩展 支持按钮等各种控件

    Duilib是一款广泛应用于Windows平台的UI库,尤其在游戏开发和桌面应用中有着较高的...提供的"ListTest"压缩包很可能是包含示例代码和资源的项目,解压后学习和研究这些代码,将有助于深入理解上述知识点的实践应用。

    电子科大研究生图论05-14年图论期末试题.pdf

    - 邻接表(adjacency list) - 关联矩阵(incidence matrix)等 3. 图的基本概念: - 顶点的度(degree of a vertex) - 路径(path) - 回路(cycle) - 连通性(connectivity) - 强连通分量和弱连通分量...

    树的遍历前序后序递归算法、层序非递归算法。

    树的遍历是研究树结构的基础,它包括前序遍历、中序遍历和后序遍历。这里我们将重点讨论前序、后序递归算法以及层次(层序)非递归算法,并基于Java语言进行解析。 首先,我们来看树的存储结构。在Java中,通常使用...

    listtraverse.rar_ListTraver

    在IT领域,数据结构是计算机科学的基础,它研究如何组织和存储数据,以便高效地进行访问和修改。这里我们关注的是“ListTraver”主题,它涉及到如何遍历和倒置一个列表。这个主题通常在编程语言的学习和算法设计中...

    Linux内核调试技术——进程D状态死锁检测-List_linux-亚虎娱乐博客 - 亚虎娱乐1

    《Linux内核调试技术——进程D状态死锁检测》 在Linux操作系统中,进程的状态管理是内核核心功能的一部分,而死锁问题则是系统...对于任何深入研究和调试Linux内核的开发者来说,理解和利用这个机制是必不可少的技能。

    数据结构实战 -- 线性结构静态数组表示法(C实现源码)

    在IT领域,数据结构是计算机科学中的核心概念,它研究如何高效地组织和存储数据,以便于进行各种操作。线性结构是数据结构的一种基本形式,其中元素按特定顺序排列,便于顺序访问和操作。静态数组是实现线性结构的...

    Generic-Doubly-Linked-List-..zip_generic

    **压缩包子文件:** "Generic Doubly-Linked List ...pdf" 文件可能是一个详细的教程或者研究报告,涵盖了泛型双向链表的概念、设计、实现细节,以及可能的使用示例。通常,这样的PDF文档会包括以下部分: 1. **...

    c_list.rar_C list_C_ list_List c_c list_c list.c

    标题 "c_list.rar_C list_C list_List c_c list_c list.c" 暗示着这是一个关于C语言实现链表数据结构的代码集合。这个压缩包可能包含了一个或多个以"C list"为主题的源代码文件,专注于链表这一核心概念。链表是一种...

    数据 结构 资料 笔记 树

    ### 树的遍历方式 遍历是指按照某种顺序访问树中的所有节点。常见的遍历方法有: - **深度优先搜索(DFS, Depth-First Search)**: - 前序遍历(Pre-order Traversal):访问顺序为根-&gt;左子树-&gt;右子树。 - 中序遍历...

    Lista1-BubbleSort

    标题“Lista1-BubbleSort”表明我们关注的主题是关于编程中的冒泡排序算法,而这个主题与C++语言紧密相关。冒泡排序是一种基础的排序算法...这个项目“Lista1-BubbleSort”提供了很好的实践平台,值得深入研究和练习。

Global site tag (gtag.js) - Google Analytics