changeset 3137:7b805b65679f

IdealGraphVisualizer: use a LinkedHashSet instead of an ArrayList to store the edges of an InputGraph in order to slightly increase performance, particularly when parsing an input file
author Peter Hofer <peter.hofer@jku.at>
date Mon, 04 Jul 2011 11:28:08 +0200
parents 2def3cad2e00
children 47d03d774d20
files src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/InputGraph.java
diffstat 1 files changed, 10 insertions(+), 16 deletions(-) [+]
line wrap: on
line diff
--- a/src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/InputGraph.java	Mon Jul 04 10:56:19 2011 +0200
+++ b/src/share/tools/IdealGraphVisualizer/Data/src/com/sun/hotspot/igv/data/InputGraph.java	Mon Jul 04 11:28:08 2011 +0200
@@ -28,8 +28,8 @@
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
-import java.util.Hashtable;
 import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -40,11 +40,11 @@
  */
 public class InputGraph extends Properties.Entity {
 
-    private LinkedHashMap<Integer, InputNode> nodes;
-    private ArrayList<InputEdge> edges;
+    private Map<Integer, InputNode> nodes;
+    private Set<InputEdge> edges;
     private Group parent;
-    private LinkedHashMap<String, InputBlock> blocks;
-    private LinkedHashMap<Integer, InputBlock> nodeToBlock;
+    private Map<String, InputBlock> blocks;
+    private Map<Integer, InputBlock> nodeToBlock;
     private Pair<InputGraph, InputGraph> sourceGraphs;
     private int parentIndex;
 
@@ -54,7 +54,7 @@
         this.sourceGraphs = sourceGraphs;
         setName(name);
         nodes = new LinkedHashMap<Integer, InputNode>();
-        edges = new ArrayList<InputEdge>();
+        edges = new LinkedHashSet<InputEdge>();
         blocks = new LinkedHashMap<String, InputBlock>();
         nodeToBlock = new LinkedHashMap<Integer, InputBlock>();
     }
@@ -177,9 +177,6 @@
                 }
                 noBlock.addNode(n.getId());
             }
-        }
-
-        for (InputNode n : this.getNodes()) {
             assert this.getBlock(n) != null;
         }
     }
@@ -249,22 +246,19 @@
     }
 
     public Collection<InputEdge> getEdges() {
-        return Collections.unmodifiableList(edges);
+        return Collections.unmodifiableSet(edges);
     }
 
     public void removeEdge(InputEdge c) {
-        assert edges.contains(c);
-        edges.remove(c);
-        assert !edges.contains(c);
+        boolean removed = edges.remove(c);
+        assert removed;
     }
 
     public void addEdge(InputEdge c) {
-        
         // Be tolerant with duplicated edges.
-        if(!edges.contains(c)) {
+        if (!edges.contains(c)) {
             edges.add(c);
         }
-        assert edges.contains(c);
     }
 
     public Group getGroup() {