2009-04-02 13 views

Antwort

32

Die BiMap von Google Guava sieht aus wie es Ihnen passt.

Eine Bimap (oder "bidirektionale Karte") ist eine Karte, die die Eindeutigkeit ihrer Werte und der ihrer Schlüssel beibehält. Diese Einschränkung ermöglicht es Bimaps, eine "umgekehrte Ansicht" zu unterstützen, bei der es sich um eine weitere Bimap handelt, die dieselben Einträge wie diese Bimap enthält, jedoch umgekehrte Schlüssel und Werte.

Oder die BidiMap von Apache Commons Collections:

Definiert eine Karte, die zwischen Schlüssel und Werte bidirektionale Lookup ermöglicht.

Diese erweiterte Map stellt eine Zuordnung dar, bei der ein Schlüssel einen Wert suchen kann und ein Wert eine Taste mit gleicher Leichtigkeit nachschlagen kann. Diese Schnittstelle erweitert sich um Map und kann daher überall dort verwendet werden, wo eine Karte benötigt wird. Die Schnittstelle bietet eine inverse Kartenansicht, die den vollen Zugriff auf beide Richtungen des BidiMap ermöglicht.

7

Sie können BiMap von Eclipse Collections (vormals GS Sammlungen) verwenden.

BiMap ist eine Karte, mit der Benutzer Nachschläge aus beiden Richtungen durchführen können. Sowohl die Schlüssel als auch die Werte in einer BiMap sind einzigartig.

Die wichtigste Implementierung ist HashBiMap.

inverse()

BiMap.inverse() gibt eine Ansicht, in der die Position des Schlüsseltypen und Wertetypen vertauscht.

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, außer es, wenn ein doppelter Wert wirft 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()

Das ist wie MutableBiMap.put() verhält, 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.put(1, "2"); // replaces the [1,"1"] pair with [1, "2"] 
biMap.forcePut(2, "2"); // removes the [1, "2"] pair before putting 
Assert.assertFalse(biMap.containsKey(1)); 
Assert.assertEquals(HashBiMap.newWithKeysValues(2, "2"), biMap); 

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

1

Die akzeptierte Antwort erwähnt BiMap, aber es ist more up-to-date mit den Google Guava-Bibliotheken geworden.

A BiMap<K, V> ist ein Map<K, V> dass

  • können Sie die "inverse" BiMap<V, K> mit inverse()
  • gewährleistet sehen, dass die Werte sind einzigartig, so dass values() ein Set

So können Sie mit Code wie folgt enden:

Einige Einsprüche mit diesem Objekt:

  • Sie werden nicht in der Lage sein, nicht eindeutige Werte zu addieren, oder Sie werden eine IllegalArgumentException bekommen. Sie können forcePut(key, value) verwenden, aber das wird override the existing key-value pair.
Verwandte Themen