`

ArrayList 多种遍历速度比较

 
阅读更多
package org.ssh.coll;

import java.util.AbstractCollection;
import java.util.AbstractList;
import java.util.AbstractMap;
import java.util.AbstractQueue;
import java.util.AbstractSequentialList;
import java.util.AbstractSet;
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.BitSet;
import java.util.Calendar;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.ConcurrentModificationException;
import java.util.Currency;
//import java.util.CurrencyData;
import java.util.Date;
import java.util.Deque;
import java.util.Dictionary;
import java.util.DuplicateFormatFlagsException;
import java.util.EmptyStackException;
import java.util.Enumeration;
import java.util.EnumMap;
import java.util.EnumSet;
import java.util.EventListener;
import java.util.EventListenerProxy;
import java.util.EventObject;
import java.util.FormatFlagsConversionMismatchException;
import java.util.Formattable;
import java.util.FormattableFlags;
import java.util.Formatter;
import java.util.FormatterClosedException;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Hashtable;
import java.util.IdentityHashMap;
import java.util.IllegalFormatCodePointException;
import java.util.IllegalFormatConversionException;
import java.util.IllegalFormatException;
import java.util.IllegalFormatFlagsException;
import java.util.IllegalFormatPrecisionException;
import java.util.IllegalFormatWidthException;
import java.util.InputMismatchException;
import java.util.InvalidPropertiesFormatException;
import java.util.Iterator;
//import java.util.JapaneseImperialCalendar;
//import java.util.JumboEnumSet;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.ListIterator;
import java.util.ListResourceBundle;
import java.util.Locale;
//import java.util.LocaleISOData;
import java.util.Map;
import java.util.MissingFormatArgumentException;
import java.util.MissingFormatWidthException;
import java.util.MissingResourceException;
import java.util.NavigableMap;
import java.util.NavigableSet;
import java.util.NoSuchElementException;
import java.util.Observable;
import java.util.Observer;
import java.util.PriorityQueue;
import java.util.Properties;
import java.util.PropertyPermission;
//import java.util.PropertyPermissionCollection;
import java.util.PropertyResourceBundle;
import java.util.Queue;
import java.util.Random;
import java.util.RandomAccess;
//import java.util.RandomAccessSubList;
//import java.util.RegularEnumSet;
import java.util.ResourceBundle;
import java.util.Scanner;
import java.util.ServiceConfigurationError;
import java.util.ServiceLoader;
import java.util.Set;
import java.util.SimpleTimeZone;
import java.util.SortedMap;
import java.util.SortedSet;
import java.util.Stack;
import java.util.StringTokenizer;
//import java.util.SubList;
//import java.util.TaskQueue;
import java.util.Timer;
import java.util.TimerTask;
//import java.util.TimerThread;
import java.util.TimeZone;
import java.util.TooManyListenersException;
import java.util.TreeMap;
import java.util.TreeSet;
import java.util.UnknownFormatConversionException;
import java.util.UnknownFormatFlagsException;
import java.util.UUID;
import java.util.Vector;
import java.util.WeakHashMap;

//import java.util.XMLUtils;

/**
 * 测试大集合的遍历速度
 * 
 * root Collection and Map
 * 
 * 常用集合 list map set
 * 
 * @author dgt
 * 
 */
public class LargeCollTest
{
    public static void main(String[] args)
    {
        List<String> list = new ArrayList<String>();

        for (int i = 1; i <= 2000000; i++)
        {
            list.add(String.valueOf(i));
        }

        // 方法1
        Iterator<String> it1 = list.iterator();
        
        long t1 = System.currentTimeMillis();
        while (it1.hasNext())
        {
            it1.next();
        }
        long t2 = System.currentTimeMillis();
        
        System.out.println("list 循环1 的时间差 = "+ (t2-t1));
        
        // 方法2 怪异!

        long t3 = System.currentTimeMillis();
        for (Iterator<String> it2 = list.iterator(); it2.hasNext();)
        {
           it2.next();
        }
        long t4 = System.currentTimeMillis();
        
        System.out.println("list 循环2 的时间差 = "+ (t4-t3));
        // 方法3

        long t5 = System.currentTimeMillis();
        for (String tmp : list)
        {
            String s = tmp;
        }
        long t6 = System.currentTimeMillis();
        System.out.println("list 循环3 的时间差 = "+ (t6-t5));

        // 方法4
        long t7 = System.currentTimeMillis();
        for (int i = 0; i < list.size(); i++)
        {
            list.get(i);
        }
        long t8 = System.currentTimeMillis();
        System.out.println("list 循环4 的时间差 = "+ (t8-t7));
    }
}

 

各种测试时间比较

添加一百万的时候状态:
list 循环1 的时间差 = 31
list 循环2 的时间差 = 47
list 循环3 的时间差 = 31
list 循环4 的时间差 = 16

list 循环1 的时间差 = 32
list 循环2 的时间差 = 46
list 循环3 的时间差 = 32
list 循环4 的时间差 = 15

list 循环1 的时间差 = 47
list 循环2 的时间差 = 31
list 循环3 的时间差 = 31
list 循环4 的时间差 = 16

list 循环1 平均的时间差 = 36.6
list 循环2 平均的时间差 = 41.3
list 循环3 平均的时间差 = 31.3
list 循环4 平均的时间差 = 15.6


===========================
添加二百万的时候状态:

list 循环1 的时间差 = 93
list 循环2 的时间差 = 78
list 循环3 的时间差 = 78
list 循环4 的时间差 = 32

list 循环1 的时间差 = 62
list 循环2 的时间差 = 78
list 循环3 的时间差 = 63
list 循环4 的时间差 = 31

list 循环1 的时间差 = 78
list 循环2 的时间差 = 63
list 循环3 的时间差 = 78
list 循环4 的时间差 = 31

list 循环1 平均的时间差 = 77.6
list 循环2 平均的时间差 = 73
list 循环3 平均的时间差 = 73
list 循环4 平均的时间差 = 31.3

如有不妥,敬请补充。

 

分享到:
评论

相关推荐

    C# 集合对象遍历性能测试

    它的查找速度非常快,平均时间复杂度为O(1),但在遍历整个Dictionary时,由于需要按照内部哈希顺序而不是插入顺序进行,遍历性能并不如List。此外,如果键值对数量较大,且哈希冲突频繁,遍历性能会受到一定影响。 ...

    ArrayList LinkedList Vector性能测试

    总结来说,ArrayList适合于频繁进行随机读取且对插入和删除速度要求不高的场景;LinkedList适用于需要频繁插入和删除元素,但随机访问不频繁的情况;而Vector虽然提供了线程安全,但其性能通常低于ArrayList和...

    java——ArrayList-源码解析.docx

    ArrayList 提供了多种构造方法: - 带有初始容量参数的构造器允许用户指定 ArrayList 的起始大小,避免不必要的扩容操作。 - 无参构造器默认创建一个容量为10的 ArrayList。 - 从 Collection 初始化的构造器会将...

    C#个人通讯录,分别用了ArrayList、HashTable、XML、Access、TXT实现

    ArrayList提供了添加、删除、查找和遍历元素的方法,使得在程序中管理联系人数据变得方便。 2. HashTable: HashTable是另一种集合类,它使用哈希表来存储键值对。在这个通讯录应用中,HashTable可能用于通过姓名或...

    ArrayList.md

    相比于其他数据结构(如链表),`ArrayList`提供了更快的随机访问速度,并且在进行迭代时表现更佳。本文将深入剖析`ArrayList`的内部实现机制,以便更好地理解和运用这一强大的工具。 #### 二、ArrayList的基本概念...

    Java 各种集合的区别ArrayList Vector LinkedList map区别

    LinkedList 是一种基于链表的集合类别,它可以快速地插入和删除数据,但是它的访问速度相比 ArrayList 和 Vector 要慢一些。LinkedList 的优点是:它可以快速地插入和删除数据,并且它不需要移动大量的数据,从而...

    java中List集合及其遍历详解

    然而,由于链表结构,查询元素的速度较慢,因为它需要从头开始遍历。LinkedList适合于需要频繁进行插入和删除操作的场景,且不关心查询性能。 3. Vector:Vector是JDK 1.0时代的产物,同样基于数组,但它提供线程...

    Java进阶--深入理解ArrayList实现原理

    这需要遍历ArrayList并使用equals()方法来比较元素。 **线程安全性** ArrayList不是线程安全的,因此在多线程环境下使用时需要额外的同步措施,或者考虑使用线程安全的Vector或CopyOnWriteArrayList。 **性能考虑*...

    Java集合框架常见面试题.pdf

    Java 提供了多种遍历集合的方式,包括使用 Iterator、for-each 循环和 Java 8 中的 Stream。 Java 集合框架的优点 Java 集合框架的优点包括: * 提高了编程效率:Java 集合框架提供了多种集合类和遍历集合的方式...

    完整版 Java初级教程 Java语言程序设计 第8章 集合框架(共19页).ppt

    2. **遍历方式**:LinkedList同样支持多种遍历方式,但查询效率相对较低,因为需要从头开始遍历。 3. **线程安全性**:与ArrayList一样,LinkedList也不是线程安全的。 ### Vector详解 Vector是ArrayList的一个早期...

    Java中为何要使用ArrayList

    3. **易于遍历**:通过迭代器或者增强型for循环,可以轻松遍历ArrayList中的所有元素,无需像数组那样依赖索引。 4. **删除元素的优化**:当删除ArrayList中的一个元素时,ArrayList会自动调整内部数组,将后续元素...

    java集合.docx

    插入、查询和遍历速度较快,但需保证元素可比较。 - **常用方法**:add(), addAll(), remove(), removeAll(), contains(), size() - **遍历方式**: - for循环遍历 - 迭代器遍历 **双列集合(Map)** Map集合...

    list map相关用法实例-流氓版

    这里我们将深入探讨`ArrayList`、`Vector`、`HashMap`和`Hashtable`这四种数据结构的用法以及多种遍历方法。 首先,`List`接口代表一个有序的集合,元素可以通过索引访问。`ArrayList`和`Vector`都是`List`接口的...

    学士后Java集合框架和泛型课后习题答案

    ArrayList基于数组,提供快速随机访问,但插入和删除元素速度较慢;LinkedList基于双向链表,插入和删除速度快,但随机访问性能较差。 3. **HashSet和TreeSet**:HashSet不维护元素顺序,其内部基于HashMap实现,...

    java代码-使用集合ArrayList对字符串进行存储和管理

    遍历ArrayList有多种方式,包括传统的for循环、增强型for循环(foreach)以及迭代器: 1. 传统for循环: ```java for (int i = 0; i (); i++) { System.out.println(list.get(i)); } ``` 2. 增强型for循环: ```...

    02-Java集合容器面试题-重点.docx

    插入数据时,ArrayList、LinkedList、Vector谁速度较快?阐述ArrayList、Vector、LinkedList的存储性能和特性?多线程场景下如何使用ArrayList?为什么ArrayList的elementData加上transient修饰?List和Set的区别Set...

    java集合面试题.doc

    ArrayList 的底层是数组,一个索引对应一个元素,所以查询速度快;但是在增删时,需要调整整组数据的移动,所以增删较慢。 LinkedList 的底层是双向链表,每次查询时都要从两头开始查询(离头近就从头查,离尾近就...

    Java面向对象程序设计-集合框架(List接口).pptx

    而如果更注重遍历速度和随机访问性能,且列表变化不大,那么ArrayList更适合。 总的来说,理解并熟练使用Java的集合框架,特别是List接口及其实现类,对于开发高效、可靠的农业信息系统至关重要。合理选择和利用...

    javaEE课件

    例如,创建 Teacher 类,包含 no、name、sex 和 salary 属性,然后创建多个 Teacher 对象并存储在 ArrayList 中,遍历并打印信息。 六、Set 接口 Set 接口的常用方法包括 `add(E o)` 添加元素,`remove(Object o)` ...

Global site tag (gtag.js) - Google Analytics