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
如有不妥,敬请补充。
相关推荐
它的查找速度非常快,平均时间复杂度为O(1),但在遍历整个Dictionary时,由于需要按照内部哈希顺序而不是插入顺序进行,遍历性能并不如List。此外,如果键值对数量较大,且哈希冲突频繁,遍历性能会受到一定影响。 ...
总结来说,ArrayList适合于频繁进行随机读取且对插入和删除速度要求不高的场景;LinkedList适用于需要频繁插入和删除元素,但随机访问不频繁的情况;而Vector虽然提供了线程安全,但其性能通常低于ArrayList和...
ArrayList 提供了多种构造方法: - 带有初始容量参数的构造器允许用户指定 ArrayList 的起始大小,避免不必要的扩容操作。 - 无参构造器默认创建一个容量为10的 ArrayList。 - 从 Collection 初始化的构造器会将...
ArrayList提供了添加、删除、查找和遍历元素的方法,使得在程序中管理联系人数据变得方便。 2. HashTable: HashTable是另一种集合类,它使用哈希表来存储键值对。在这个通讯录应用中,HashTable可能用于通过姓名或...
相比于其他数据结构(如链表),`ArrayList`提供了更快的随机访问速度,并且在进行迭代时表现更佳。本文将深入剖析`ArrayList`的内部实现机制,以便更好地理解和运用这一强大的工具。 #### 二、ArrayList的基本概念...
LinkedList 是一种基于链表的集合类别,它可以快速地插入和删除数据,但是它的访问速度相比 ArrayList 和 Vector 要慢一些。LinkedList 的优点是:它可以快速地插入和删除数据,并且它不需要移动大量的数据,从而...
然而,由于链表结构,查询元素的速度较慢,因为它需要从头开始遍历。LinkedList适合于需要频繁进行插入和删除操作的场景,且不关心查询性能。 3. Vector:Vector是JDK 1.0时代的产物,同样基于数组,但它提供线程...
这需要遍历ArrayList并使用equals()方法来比较元素。 **线程安全性** ArrayList不是线程安全的,因此在多线程环境下使用时需要额外的同步措施,或者考虑使用线程安全的Vector或CopyOnWriteArrayList。 **性能考虑*...
Java 提供了多种遍历集合的方式,包括使用 Iterator、for-each 循环和 Java 8 中的 Stream。 Java 集合框架的优点 Java 集合框架的优点包括: * 提高了编程效率:Java 集合框架提供了多种集合类和遍历集合的方式...
2. **遍历方式**:LinkedList同样支持多种遍历方式,但查询效率相对较低,因为需要从头开始遍历。 3. **线程安全性**:与ArrayList一样,LinkedList也不是线程安全的。 ### Vector详解 Vector是ArrayList的一个早期...
3. **易于遍历**:通过迭代器或者增强型for循环,可以轻松遍历ArrayList中的所有元素,无需像数组那样依赖索引。 4. **删除元素的优化**:当删除ArrayList中的一个元素时,ArrayList会自动调整内部数组,将后续元素...
插入、查询和遍历速度较快,但需保证元素可比较。 - **常用方法**:add(), addAll(), remove(), removeAll(), contains(), size() - **遍历方式**: - for循环遍历 - 迭代器遍历 **双列集合(Map)** Map集合...
这里我们将深入探讨`ArrayList`、`Vector`、`HashMap`和`Hashtable`这四种数据结构的用法以及多种遍历方法。 首先,`List`接口代表一个有序的集合,元素可以通过索引访问。`ArrayList`和`Vector`都是`List`接口的...
ArrayList基于数组,提供快速随机访问,但插入和删除元素速度较慢;LinkedList基于双向链表,插入和删除速度快,但随机访问性能较差。 3. **HashSet和TreeSet**:HashSet不维护元素顺序,其内部基于HashMap实现,...
遍历ArrayList有多种方式,包括传统的for循环、增强型for循环(foreach)以及迭代器: 1. 传统for循环: ```java for (int i = 0; i (); i++) { System.out.println(list.get(i)); } ``` 2. 增强型for循环: ```...
插入数据时,ArrayList、LinkedList、Vector谁速度较快?阐述ArrayList、Vector、LinkedList的存储性能和特性?多线程场景下如何使用ArrayList?为什么ArrayList的elementData加上transient修饰?List和Set的区别Set...
ArrayList 的底层是数组,一个索引对应一个元素,所以查询速度快;但是在增删时,需要调整整组数据的移动,所以增删较慢。 LinkedList 的底层是双向链表,每次查询时都要从两头开始查询(离头近就从头查,离尾近就...
而如果更注重遍历速度和随机访问性能,且列表变化不大,那么ArrayList更适合。 总的来说,理解并熟练使用Java的集合框架,特别是List接口及其实现类,对于开发高效、可靠的农业信息系统至关重要。合理选择和利用...
例如,创建 Teacher 类,包含 no、name、sex 和 salary 属性,然后创建多个 Teacher 对象并存储在 ArrayList 中,遍历并打印信息。 六、Set 接口 Set 接口的常用方法包括 `add(E o)` 添加元素,`remove(Object o)` ...