今天看见网上有个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,Java提供了一种迭代器(Iterator)的方式。ListIterator是Iterator的子接口,专为List设计,除了基本的`hasNext()`和`next()`方法外,还提供了`previous()`,`nextIndex()`和`previousIndex()`等方法,...
图的深度优先遍历算法与实现是数据结构研究中的重要课题。图是一种复杂的数据结构,它能够存储和表达元素之间的复杂关系,图的存储和遍历相比线性表来说要复杂得多。图的遍历是图论和算法分析中的基本操作,它是其他...
9. **挑战与提高**:除了基础概念,还可以研究Kahn算法、Tarjan算法等拓扑排序的优化方法,以及如何在复杂图结构中应用图的遍历和排序。 总之,这个资源包提供了全面的图论学习材料,无论是对初学者还是进阶者,都...
在C++中,我们可以使用POSIX的`/proc`文件系统(在Linux中)或者Windows API如`CreateToolhelp32Snapshot`和`Process32First`来遍历进程列表。 在Java中,`java.lang.management.ManagementFactory`类提供了获取...
最后,`File and list compare code.zip`可能是一个包含源代码的压缩包,供开发者研究或扩展此工具的功能。可能包含了实现文件和目录比对的具体代码,以及任何必要的配置文件或示例数据。 总的来说,这个项目提供了...
初始化时,previous和current都设置为head,而head通常由用户传入或通过其他方式获取。 接下来,我们进入一个循环,直到current为空(即遍历到链表末尾)。在每次循环中,我们做以下操作: 1. 保存当前节点的下一个...
在IT领域,数据结构是计算机科学的基础,它们是组织和管理大量数据的有效方式。本话题主要聚焦于一种基本的数据结构——链表,以及如何用C语言实现链表的创建、插入和删除操作。C语言是一种底层编程语言,它允许直接...
链表的核心数据结构`struct list_head`包含了两个`struct list_head *`类型的指针,分别指向前后相邻的链表节点,从而支持双向遍历。 值得注意的是,Linux内核的链表结构并不直接包含数据,而是嵌入到具体的数据...
Duilib是一款广泛应用于Windows平台的UI库,尤其在游戏开发和桌面应用中有着较高的...提供的"ListTest"压缩包很可能是包含示例代码和资源的项目,解压后学习和研究这些代码,将有助于深入理解上述知识点的实践应用。
- 邻接表(adjacency list) - 关联矩阵(incidence matrix)等 3. 图的基本概念: - 顶点的度(degree of a vertex) - 路径(path) - 回路(cycle) - 连通性(connectivity) - 强连通分量和弱连通分量...
树的遍历是研究树结构的基础,它包括前序遍历、中序遍历和后序遍历。这里我们将重点讨论前序、后序递归算法以及层次(层序)非递归算法,并基于Java语言进行解析。 首先,我们来看树的存储结构。在Java中,通常使用...
在IT领域,数据结构是计算机科学的基础,它研究如何组织和存储数据,以便高效地进行访问和修改。这里我们关注的是“ListTraver”主题,它涉及到如何遍历和倒置一个列表。这个主题通常在编程语言的学习和算法设计中...
《Linux内核调试技术——进程D状态死锁检测》 在Linux操作系统中,进程的状态管理是内核核心功能的一部分,而死锁问题则是系统...对于任何深入研究和调试Linux内核的开发者来说,理解和利用这个机制是必不可少的技能。
在IT领域,数据结构是计算机科学中的核心概念,它研究如何高效地组织和存储数据,以便于进行各种操作。线性结构是数据结构的一种基本形式,其中元素按特定顺序排列,便于顺序访问和操作。静态数组是实现线性结构的...
**压缩包子文件:** "Generic Doubly-Linked List ...pdf" 文件可能是一个详细的教程或者研究报告,涵盖了泛型双向链表的概念、设计、实现细节,以及可能的使用示例。通常,这样的PDF文档会包括以下部分: 1. **...
标题 "c_list.rar_C list_C list_List c_c list_c list.c" 暗示着这是一个关于C语言实现链表数据结构的代码集合。这个压缩包可能包含了一个或多个以"C list"为主题的源代码文件,专注于链表这一核心概念。链表是一种...
### 树的遍历方式 遍历是指按照某种顺序访问树中的所有节点。常见的遍历方法有: - **深度优先搜索(DFS, Depth-First Search)**: - 前序遍历(Pre-order Traversal):访问顺序为根->左子树->右子树。 - 中序遍历...
标题“Lista1-BubbleSort”表明我们关注的主题是关于编程中的冒泡排序算法,而这个主题与C++语言紧密相关。冒泡排序是一种基础的排序算法...这个项目“Lista1-BubbleSort”提供了很好的实践平台,值得深入研究和练习。