Ignore:
Timestamp:
2010-11-25T18:06:50+01:00 (13 years ago)
Author:
bastiK
Message:

Replace Bag by MultiMap.
Both collections are quite similar, but there is a technical difference: Bag is backed by an ArrayList and MultiMap by a LinkedHashSet. So with a Bag you could map a key multiple times to a certain value. I haven't found any usage where this behaviour is required or intended.
Also there could be a certain performance drawback with LinkedHashSet compared to ArrayList. However in the typical validator use case the value collection represents duplicate or crossing ways, so the number of elements is usually 1 or 2 and mostly smaller than the initial capacity (LHS=16, AL=10). (But I could have overlooked some use cases.)

Location:
trunk/src/org/openstreetmap/josm/gui
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/gui/dialogs/validator/ValidatorTreePanel.java

    r3671 r3674  
    88import java.util.HashMap;
    99import java.util.HashSet;
     10import java.util.LinkedHashSet;
    1011import java.util.List;
    1112import java.util.Map;
     
    2324import org.openstreetmap.josm.data.validation.Severity;
    2425import org.openstreetmap.josm.data.validation.TestError;
    25 import org.openstreetmap.josm.data.validation.util.Bag;
    2626import org.openstreetmap.josm.data.validation.util.MultipleNameVisitor;
     27import org.openstreetmap.josm.tools.MultiMap;
    2728
    2829/**
     
    138139        }
    139140
    140         Map<Severity, Bag<String, TestError>> errorTree = new HashMap<Severity, Bag<String, TestError>>();
    141         Map<Severity, HashMap<String, Bag<String, TestError>>> errorTreeDeep = new HashMap<Severity, HashMap<String, Bag<String, TestError>>>();
     141        Map<Severity, MultiMap<String, TestError>> errorTree = new HashMap<Severity, MultiMap<String, TestError>>();
     142        Map<Severity, HashMap<String, MultiMap<String, TestError>>> errorTreeDeep = new HashMap<Severity, HashMap<String, MultiMap<String, TestError>>>();
    142143        for (Severity s : Severity.values()) {
    143             errorTree.put(s, new Bag<String, TestError>(20));
    144             errorTreeDeep.put(s, new HashMap<String, Bag<String, TestError>>());
     144            errorTree.put(s, new MultiMap<String, TestError>(20));
     145            errorTreeDeep.put(s, new HashMap<String, MultiMap<String, TestError>>());
    145146        }
    146147
     
    165166            }
    166167            if (d != null) {
    167                 Bag<String, TestError> b = errorTreeDeep.get(s).get(m);
     168                MultiMap<String, TestError> b = errorTreeDeep.get(s).get(m);
    168169                if (b == null) {
    169                     b = new Bag<String, TestError>(20);
     170                    b = new MultiMap<String, TestError>(20);
    170171                    errorTreeDeep.get(s).put(m, b);
    171172                }
    172                 b.add(d, e);
     173                b.put(d, e);
    173174            } else {
    174                 errorTree.get(s).add(m, e);
     175                errorTree.get(s).put(m, e);
    175176            }
    176177        }
     
    178179        List<TreePath> expandedPaths = new ArrayList<TreePath>();
    179180        for (Severity s : Severity.values()) {
    180             Bag<String, TestError> severityErrors = errorTree.get(s);
    181             Map<String, Bag<String, TestError>> severityErrorsDeep = errorTreeDeep.get(s);
     181            MultiMap<String, TestError> severityErrors = errorTree.get(s);
     182            Map<String, MultiMap<String, TestError>> severityErrorsDeep = errorTreeDeep.get(s);
    182183            if (severityErrors.isEmpty() && severityErrorsDeep.isEmpty()) {
    183184                continue;
     
    192193            }
    193194
    194             for (Entry<String, List<TestError>> msgErrors : severityErrors.entrySet()) {
     195            for (Entry<String, LinkedHashSet<TestError>> msgErrors : severityErrors.entrySet()) {
    195196                // Message node
    196                 List<TestError> errs = msgErrors.getValue();
     197                Set<TestError> errs = msgErrors.getValue();
    197198                String msg = msgErrors.getKey() + " (" + errs.size() + ")";
    198199                DefaultMutableTreeNode messageNode = new DefaultMutableTreeNode(msg);
     
    209210                }
    210211            }
    211             for (Entry<String, Bag<String, TestError>> bag : severityErrorsDeep.entrySet()) {
     212            for (Entry<String, MultiMap<String, TestError>> bag : severityErrorsDeep.entrySet()) {
    212213                // Group node
    213                 Bag<String, TestError> errorlist = bag.getValue();
     214                MultiMap<String, TestError> errorlist = bag.getValue();
    214215                DefaultMutableTreeNode groupNode = null;
    215216                if (errorlist.size() > 1) {
     
    222223                }
    223224
    224                 for (Entry<String, List<TestError>> msgErrors : errorlist.entrySet()) {
     225                for (Entry<String, LinkedHashSet<TestError>> msgErrors : errorlist.entrySet()) {
    225226                    // Message node
    226                     List<TestError> errs = msgErrors.getValue();
     227                    Set<TestError> errs = msgErrors.getValue();
    227228                    String msg;
    228229                    if (groupNode != null) {
  • trunk/src/org/openstreetmap/josm/gui/layer/ValidatorLayer.java

    r3671 r3674  
    1919import org.openstreetmap.josm.data.validation.Severity;
    2020import org.openstreetmap.josm.data.validation.TestError;
    21 import org.openstreetmap.josm.data.validation.util.Bag;
    2221import org.openstreetmap.josm.gui.MapView;
    2322import org.openstreetmap.josm.gui.MapView.LayerChangeListener;
     
    2524import org.openstreetmap.josm.gui.dialogs.LayerListPopup;
    2625import org.openstreetmap.josm.tools.ImageProvider;
     26import org.openstreetmap.josm.tools.MultiMap;
    2727
    2828/**
     
    7878    @Override
    7979    public String getToolTipText() {
    80         Bag<Severity, TestError> errorTree = new Bag<Severity, TestError>();
     80        MultiMap<Severity, TestError> errorTree = new MultiMap<Severity, TestError>();
    8181        List<TestError> errors = Main.map.validatorDialog.tree.getErrors();
    8282        for (TestError e : errors) {
    83             errorTree.add(e.getSeverity(), e);
     83            errorTree.put(e.getSeverity(), e);
    8484        }
    8585
Note: See TracChangeset for help on using the changeset viewer.