Frage

lief ich über einige Codes vor kurzem bei der Arbeit (neu erstellt ähnlich sein, was mit denen ich zu tun), ähnlich dem folgenden Code

Gibt es eine Möglichkeit ich den Code überarbeiten kann unter eine Datenstruktur zu verwenden (mit Leistung im Verstand)?

Hier ist ein Code zu veranschaulichen, was ich meine:

public class ObjectMapper {

    private Map<UUID,Integer> uuidMap;
    private Map<Integer,UUID> indexMap;

    public ObjectMapper(){
        uuidMap = new HashMap<UUID,Integer>();
        indexMap = new HashMap<Integer,UUID>();
    }

    public void addMapping(int index, UUID uuid){
        uuidMap.put(uuid, index);
        indexMap.put(index, uuid);
    }


    .
    .
    .

    public Integer getIndexByUUID(UUID uuid){
        return uuidMap.get(uuid);
    }

    public UUID getUUIDByIndex(Integer index){
        return indexMap.get(index);
    }


}
War es hilfreich?

Lösung

Dies wird beantwortet hier mit der Empfehlung bimap zu verwenden, um von Google Sammlungen

Andere Tipps

Apache Sammlungen unterstützt eine BidiMap Schnittstelle und eine Vielzahl von ziemlich effektiv Implementierungen.

Sie können eine einzelne Map<Object,Object> verwenden beide Zuordnungen zu tun. Hässliche, sicher. Die Leistung soll in etwa gleich sein, oder etwas besser in dem unwahrscheinlichen Fall, dass Sie viele ObjectMappers mit einigen abgebildeten Werten haben.

Sie können mit bimap von Eclipse-Sammlungen .

BiMap ist eine Karte, die Benutzer-Abfragen aus beiden Richtungen durchführen kann. Sowohl die Schlüssel und die Werte in einer bimap sind einzigartig.

Die Haupt Implementierung ist HashBiMap.

inverse()

BiMap.inverse() gibt eine Ansicht, in der die Position des Schlüsseltypen und Werttypen getauscht werden.

MutableBiMap<Integer, String> biMap =
  HashBiMap.newWithKeysValues(1, "1", 2, "2", 3, "3");
MutableBiMap<String, Integer> inverse = biMap.inverse();
Assert.assertEquals("1", biMap.get(1));
Assert.assertEquals(1, inverse.get("1"));
Assert.assertTrue(inverse.containsKey("3"));
Assert.assertEquals(2, inverse.put("2", 4));

put()

MutableBiMap.put() verhält sich wie Map.put() auf einer regulären Karte, es sei denn es wirft, wenn ein doppelter Wert hinzugefügt wird.

MutableBiMap<Integer, String> biMap = HashBiMap.newMap();
biMap.put(1, "1"); // behaves like a regular put()
biMap.put(1, "1"); // no effect
biMap.put(2, "1"); // throws IllegalArgumentException

forcePut()

Dies verhält sich wie MutableBiMap.put(), aber es entfernt im Hintergrund die Karte Eintrag mit dem gleichen Wert, bevor das Schlüssel-Wert-Paar in der Karte setzen.

MutableBiMap<Integer, String> biMap = HashBiMap.newMap();
biMap.forcePut(1, "1"); // behaves like a regular put()
biMap.forcePut(1, "1"); // no effect
biMap.forcePut(1, "2"); // replaces the [1,"1"] pair with [1, "2"]
biMap.put(2, "2"); // removes the [1, "2"] pair before putting
Assert.assertFalse(biMap.containsKey(1));
Assert.assertEquals(HashBiMap.newWithKeysValues(2, "1"), biMap);

. Hinweis: Ich bin ein Committer für Eclipse Sammlungen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top