Class N14_Extra_DataStructureIteration

java.lang.Object
  extended by N14_Extra_DataStructureIteration

public class N14_Extra_DataStructureIteration
extends Object

Benchmarks the time to completely iterate thru all the elements of common data structures.

This class is distinct from executing N08_Part2_DataStructureAccess in sequential access mode: instead of making individual (element by element) access requests of a data structure, it always does a complete iteration thru the data structure, usually using the data structure's Iterator.

One consequence of using the data structure's Iterator is that many classes can deliver much higher performance when tested here compared to N08_Part2_DataStructureAccess. A prime example is TreeMap: it has quite poor performance when tested under N08_Part2_DataStructureAccess, even in sequential access mode, but it does much better when tested by this class.

Another consequence is that this class is able to benchmark vastly more data structures than N08_Part2_DataStructureAccess (which is limited to array-like data structures). For instance, this class can benchmark Sets, Queues, and Dequeues.

Author:
Brent Boyer

Nested Class Summary
protected static class N14_Extra_DataStructureIteration.ArrayBlockingQueueIteration
          Simply causes its superclass N14_Extra_DataStructureIteration.CollectionIteration to use an ArrayBlockingQueue.
protected static class N14_Extra_DataStructureIteration.ArrayDequeIteration
          Simply causes its superclass N14_Extra_DataStructureIteration.CollectionIteration to use an ArrayDeque.
protected static class N14_Extra_DataStructureIteration.ArrayIteration
          Task class for benchmarking the access time of an array of Integers.
protected static class N14_Extra_DataStructureIteration.ArrayIterationSynchronized
          Same code as N14_Extra_DataStructureIteration.ArrayIteration except synchronize on N14_Extra_DataStructureIteration.ArrayIteration.integers around each access.
protected static class N14_Extra_DataStructureIteration.ArrayListIteration
          Simply causes its superclass N14_Extra_DataStructureIteration.CollectionIteration to use an ArrayList.
protected static class N14_Extra_DataStructureIteration.CollectionIteration
          Same code as N14_Extra_DataStructureIteration.ArrayIteration except use a Collection that is equivalent to N14_Extra_DataStructureIteration.ArrayIteration.integers.
protected static class N14_Extra_DataStructureIteration.ConcurrentHashMapIteration1
          Simply causes its superclass N14_Extra_DataStructureIteration.MapIteration to use a ConcurrentHashMap.
protected static class N14_Extra_DataStructureIteration.ConcurrentHashMapIteration16
          Simply causes its superclass N14_Extra_DataStructureIteration.MapIteration to use a ConcurrentHashMap.
protected static class N14_Extra_DataStructureIteration.ConcurrentLinkedQueueIteration
          Simply causes its superclass N14_Extra_DataStructureIteration.CollectionIteration to use a ConcurrentLinkedQueue.
protected static class N14_Extra_DataStructureIteration.ConcurrentSkipListMapIteration
          Simply causes its superclass N14_Extra_DataStructureIteration.MapIteration to use a ConcurrentSkipListMap.
protected static class N14_Extra_DataStructureIteration.ConcurrentSkipListSetIteration
          Simply causes its superclass N14_Extra_DataStructureIteration.CollectionIteration to use a ConcurrentSkipListSet.
protected static class N14_Extra_DataStructureIteration.CopyOnWriteArrayListIteration
          Simply causes its superclass N14_Extra_DataStructureIteration.CollectionIteration to use a CopyOnWriteArrayList.
protected static class N14_Extra_DataStructureIteration.CopyOnWriteArraySetIteration
          Simply causes its superclass N14_Extra_DataStructureIteration.CollectionIteration to use a CopyOnWriteArraySet.
protected static class N14_Extra_DataStructureIteration.HashMapIteration
          Simply causes its superclass N14_Extra_DataStructureIteration.MapIteration to use a HashMap.
protected static class N14_Extra_DataStructureIteration.HashSetIteration
          Simply causes its superclass N14_Extra_DataStructureIteration.CollectionIteration to use a HashSet.
protected static class N14_Extra_DataStructureIteration.HashtableIteration
          Simply causes its superclass N14_Extra_DataStructureIteration.MapIteration to use a Hashtable.
protected static class N14_Extra_DataStructureIteration.IdentityHashMapIteration
          Simply causes its superclass N14_Extra_DataStructureIteration.MapIteration to use an IdentityHashMap.
protected static class N14_Extra_DataStructureIteration.LinkedBlockingDequeIteration
          Simply causes its superclass N14_Extra_DataStructureIteration.CollectionIteration to use a LinkedBlockingDeque.
protected static class N14_Extra_DataStructureIteration.LinkedBlockingQueueIteration
          Simply causes its superclass N14_Extra_DataStructureIteration.CollectionIteration to use a LinkedBlockingQueue.
protected static class N14_Extra_DataStructureIteration.LinkedHashMapIteration
          Simply causes its superclass N14_Extra_DataStructureIteration.MapIteration to use a LinkedHashMap.
protected static class N14_Extra_DataStructureIteration.LinkedHashSetIteration
          Simply causes its superclass N14_Extra_DataStructureIteration.CollectionIteration to use a LinkedHashSet.
protected static class N14_Extra_DataStructureIteration.LinkedListIteration
          Simply causes its superclass N14_Extra_DataStructureIteration.CollectionIteration to use a LinkedList.
protected static class N14_Extra_DataStructureIteration.MapIteration
          Same code as N14_Extra_DataStructureIteration.ArrayIteration except use a Map that is equivalent to the result of makeIntegers.
protected static class N14_Extra_DataStructureIteration.PriorityBlockingQueueIteration
          Simply causes its superclass N14_Extra_DataStructureIteration.CollectionIteration to use a PriorityBlockingQueue.
protected static class N14_Extra_DataStructureIteration.PriorityQueueIteration
          Simply causes its superclass N14_Extra_DataStructureIteration.CollectionIteration to use a PriorityQueue.
protected static class N14_Extra_DataStructureIteration.StackIteration
          Simply causes its superclass N14_Extra_DataStructureIteration.CollectionIteration to use a Stack.
protected static class N14_Extra_DataStructureIteration.TaskAbstract
          Abstract base class for Tasks which measure the iteration time of Iterable data structures: arrays, Collections, Maps.
protected static class N14_Extra_DataStructureIteration.TreeMapIteration
          Simply causes its superclass N14_Extra_DataStructureIteration.MapIteration to use a TreeMap.
protected static class N14_Extra_DataStructureIteration.TreeSetIteration
          Simply causes its superclass N14_Extra_DataStructureIteration.CollectionIteration to use a TreeSet.
protected static class N14_Extra_DataStructureIteration.VectorIteration
          Simply causes its superclass N14_Extra_DataStructureIteration.CollectionIteration to use a Vector.
protected static class N14_Extra_DataStructureIteration.WeakHashMapIteration
          Simply causes its superclass N14_Extra_DataStructureIteration.MapIteration to use a WeakHashMap.
 
Field Summary
protected static String class_key
           
protected static List<String> keysLegal
          Specifies all the switch keys which can legally appear as command line arguments to main.
protected static String pathPrefix_key
           
protected static String size_key
           
 
Constructor Summary
N14_Extra_DataStructureIteration()
           
 
Method Summary
protected static N14_Extra_DataStructureIteration.TaskAbstract getTask(String className, int size)
           
static void main(String[] args)
          Entry point to the functionality offered by this class.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

class_key

protected static final String class_key
See Also:
Constant Field Values

size_key

protected static final String size_key
See Also:
Constant Field Values

pathPrefix_key

protected static final String pathPrefix_key
See Also:
Constant Field Values

keysLegal

protected static final List<String> keysLegal
Specifies all the switch keys which can legally appear as command line arguments to main.

Constructor Detail

N14_Extra_DataStructureIteration

public N14_Extra_DataStructureIteration()
Method Detail

main

public static void main(String[] args)
                 throws Exception
Entry point to the functionality offered by this class.

Results on 2009-05-06 on my 2.5 GHz Intel Xeon E5420 machine (server jvm) are in the .../results/newPostArticleResults/dataStructureIteration directory.

Parameters:
args - must be non-null and have exactly 6 elements; these 6 elements must consist of these 4 command line switches (name/value pairs); the switches may be in any order: -class [the name of one of the task inner classes e.g. ArrayAccess], -size [the number of elements in the data structure, as an int], -pathPrefix [valid file system path prefix; the final part of the file name will be generated by this class]
Throws:
Exception - (or some subclass) if any problem happens

getTask

protected static N14_Extra_DataStructureIteration.TaskAbstract getTask(String className,
                                                                       int size)
                                                                throws Exception
Throws:
Exception