`
pda158
  • 浏览: 192760 次
社区版块
存档分类
最新评论

Java list三种遍历方法性能比较

阅读更多

从c/c++语言转向java开发,学习java语言list遍历的三种方法,顺便测试各种遍历方法的性能,测试方法为在ArrayList中插入1千万条记录,然后遍历ArrayList,发现了一个奇怪的现象,测试代码例如以下:

package com.hisense.tiger.list;
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 < 10000000; j++)
{
list.add("aaaaaa" + j);
}
System.out.println("List first visit method:");
t1=System.currentTimeMillis();
for(String tmp:list)
{
//System.out.println(tmp);
}
t2=System.currentTimeMillis();
System.out.println("Run Time:" + (t2 -t1) + "(ms)");
System.out.println("List second visit method:");
t1=System.currentTimeMillis();
for(int i = 0; i < list.size(); i++)
{
list.get(i);
//System.out.println(list.get(i));
}
t2=System.currentTimeMillis();
System.out.println("Run Time:" + (t2 -t1) + "(ms)");
System.out.println("List Third visit method:");
Iterator<String> iter = list.iterator();
t1=System.currentTimeMillis();
while(iter.hasNext())
{
iter.next();
//System.out.println(iter.next());
}
t2=System.currentTimeMillis();
System.out.println("Run Time:" + (t2 -t1) + "(ms)");
System.out.println("Finished!!!!!!!!");
}
}

 测试结果例如以下:

  List first visit method:
  Run Time:170(ms)
  List second visit method:
  Run Time:10(ms)
  List Third visit method:
  Run Time:34(ms)
  Finished!!!!!!!!
  测试的结论非常奇怪,第一种方法是java语言支持的新语法,代码最简洁,可是在三种方法中,性能确是最差的,取size进行遍历性能是最高的,求牛人解释?
2
0
分享到:
评论
7 楼 王新春 2015-03-10  
jdk:1.6.0_43的版本

List first visit method:
Run Time:77(ms)
List second visit method:
Run Time:74(ms)
List Third visit method:
Run Time:71(ms)
Finished!!!!!!!!
所以三种方式几乎没有差异
6 楼 bulot 2014-11-21  
在jdk1.7下面结果
List first visit method:
Run Time:605(ms)
List second visit method:
Run Time:717(ms)
List Third visit method:
Run Time:600(ms)
Finished!!!!!!!!

在第二种方法中如果把list.size() 抽取出来,结果为
List first visit method:
Run Time:600(ms)
List second visit method:
Run Time:373(ms)
List Third visit method:
Run Time:565(ms)
Finished!!!!!!!!

楼主的测试方法有改进的地方~~
5 楼 ArthurTsang 2014-11-21  
foreach4 写道
kidding87 写道
这样才是公平的
for(int i = 0; i < list.size(); i++)  
		{  
		String tmp = list.get(i);  
		//System.out.println(list.get(i));  
		} 


while(iter.hasNext())  
		{  
			String tmp = iter.next();  
		//System.out.println(iter.next());  
		}  


注释的代码也会编译吗


说的是赋值给tmp吧
4 楼 foreach4 2014-11-21  
kidding87 写道
这样才是公平的
for(int i = 0; i < list.size(); i++)  
		{  
		String tmp = list.get(i);  
		//System.out.println(list.get(i));  
		} 


while(iter.hasNext())  
		{  
			String tmp = iter.next();  
		//System.out.println(iter.next());  
		}  


注释的代码也会编译吗
3 楼 kidding87 2014-11-21  
这样才是公平的
for(int i = 0; i < list.size(); i++)  
		{  
		String tmp = list.get(i);  
		//System.out.println(list.get(i));  
		} 


while(iter.hasNext())  
		{  
			String tmp = iter.next();  
		//System.out.println(iter.next());  
		}  

2 楼 foreach4 2014-11-21  
看来还是要用原始的方法进行遍历list了,可是, 你用的是哪个版本测试的呢
1 楼 tiant 2014-11-21  
第一种方式从list中取出的值,需要赋值给 tmp 变量,所以效率低。

相关推荐

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

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

    Java 遍历文件夹内文件

    总结来说,遍历Java文件夹内文件涉及到`File`类的使用,特别是`listFiles()`方法,可能还会用到一些第三方库。具体的实现细节和策略,以及`FileSystem.java`和`FileSystem1.java`中的代码,都需要通过实际查看源码...

    java程序的四种遍历

    首先,这段代码主要展示了如何在Java中遍历一个列表(`List`),并且提供了四种不同的遍历方法。接下来,我们将详细介绍这四种遍历方式及其应用场景。 ### 1. 基于索引的传统for循环 这是最传统也是最直观的遍历...

    java遍历list集合3种方式和性能对比

    下面将详细探讨三种遍历List集合的方法及其性能差异。 1. 使用`Iterator`遍历: ```java List list = new ArrayList(); // 添加元素 for (Iterator&lt;String&gt; it = list.iterator(); it.hasNext(); ) { String data ...

    java-遍历map

    本文将深入探讨如何在Java中使用`keySet`方法来遍历`Map`集合,以及相关的知识点。 ### 一、Java Map接口简介 `Map`接口是Java集合框架的一部分,它提供了存储和检索唯一键对象及其对应的值对象的方法。一个`Map`...

    java遍历JSON树

    ### Java遍历JSON树知识点详解 #### 一、前言 在处理Web应用程序中的数据时,JSON(JavaScript Object Notation)是一种非常常见的数据格式。它轻量级且易于读写,因此广泛应用于前后端的数据交互中。对于Java...

    遍历目录下所有的文件_遍历文件夹文件_java遍历目录下所有文件_

    在Java编程语言中,遍历一个目录下的所有文件和子目录是一项常见的任务,尤其是在处理文件系统操作时。这里我们将深入探讨如何使用Java API来实现这一功能,并解释相关的知识点。 首先,Java提供了`java.io.File`类...

    list遍历集合源码

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

    Java遍历本地目录所有文件的实现

    ### Java遍历本地目录所有文件的实现:递归方法详解 在Java开发中,遍历本地目录中的所有文件是一项常见的需求,尤其在处理文件管理、数据读取或系统监控等场景下。本文将深入探讨如何利用Java编程语言,通过递归...

    java中List集合及其遍历详解

    在Java编程语言中,List集合是一个重要的数据结构,...了解它们的特性和遍历方法,能够帮助我们更好地选择和使用List集合,优化程序性能。在实际开发中,要根据实际需求选择合适的数据结构,以实现高效、易维护的代码。

    java 遍历文件夹

    它提供了遍历文件夹的方法,如`list()`、`listFiles()` 和 `exists()`等。 2. **`list()` 方法**:对于一个目录,`list()` 方法返回一个字符串数组,包含了该目录下的所有文件和子目录的名字。这些名字并不包含路径...

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

    本篇文章将详细介绍Java中List集合的三种遍历方式及其特点。 1. **迭代器(Iterator)遍历** 迭代器是Java集合框架提供的标准遍历接口。使用`Iterator`遍历List集合的代码如下: ```java List&lt;String&gt; list = ...

    java中遍历某个目录下的所有文件及文件夹中的文件

    - 调用`listFile()`方法开始遍历过程。 - `listFile()`方法内部: - 调用`listFiles()`获取当前目录下的所有文件和子目录。 - 使用`for`循环遍历这些文件/目录。 - 如果是文件,则打印其路径。 - 如果是目录,则...

    java中循环遍历删除List和Set集合中元素的方法(推荐)

    为了避免上述异常,有以下两种正确的方法来遍历并删除List和Set集合中的元素: 1. **使用Iterator进行遍历和删除** 这种方法通过获取集合的Iterator,并在循环中使用`iterator.remove()`方法删除元素,避免了并发...

    java遍历文件树形结构输出

    ### Java遍历文件树形结构输出 在Java编程中,我们经常会遇到需要遍历文件夹中的所有文件,并将其以树形结构输出的需求。这在文件系统管理、构建项目目录结构等场景中非常实用。下面将详细介绍如何使用Java来实现这...

    Java 实例 - 集合遍历源代码-详细教程.zip

    总结,Java集合遍历是日常开发中常见的操作,理解不同集合的遍历方式对于优化代码性能至关重要。本教程提供的源代码详细解释了ArrayList、LinkedList、HashSet和HashMap的遍历,以及Java 8的流API使用,有助于加深对...

    java遍历文件夹解析XML.doc

    在Java编程中,遍历文件夹和解析XML是两种常见的操作,它们在处理数据和构建应用程序时发挥着关键作用。这篇文档"java遍历文件夹解析XML.doc"可能详细介绍了如何使用Java进行这两个任务。 首先,让我们深入了解一下...

Global site tag (gtag.js) - Google Analytics