BiMap bietet einen neuen Sammlungstyp, der eine bidirektionale zugeordnete Datenstruktur aus Schlüssel und Wert bereitstellt.
Wenn wir Java Map verwenden, suchen wir normalerweise oft nach Werten über den Schlüssel, aber wenn das folgende Szenario auftritt, müssen wir zusätzlichen Code schreiben. Schauen wir uns zunächst die folgende Kartenstruktur an, die die Identifikationsnummer und den Dateinamen darstellt.
[code] @Test public void logMapTest(){ Map<Integer,String> logfileMap = Maps.newHashMap(); logfileMap.put(1,"a.log"); logfileMap.put(2,"b.log"); logfileMap.put(3,"c.log"); System.out.println("logfileMap:"+logfileMap); }
Wenn wir den Dateinamen anhand der Seriennummer finden müssen, ist das sehr einfach. Wenn wir jedoch die Seriennummer anhand des Dateinamens finden müssen, müssen wir die Karte durchsuchen. Natürlich können wir auch eine Map-Inversionsmethode schreiben, um die invertierte Mapping-Beziehung zu realisieren.
[code] /** * 逆转Map的key和value * @param <S> * @param <T> * @param map * @return */ public static <S,T> Map<T,S> getInverseMap(Map<S,T> map) { Map<T,S> inverseMap = new HashMap<T,S>(); for(Entry<S,T> entry: map.entrySet()) { inverseMap.put(entry.getValue(), entry.getKey()); } return inverseMap; }
[code] @Test public void logMapTest(){ Map<Integer,String> logfileMap = Maps.newHashMap(); logfileMap.put(1,"a.log"); logfileMap.put(2,"b.log"); logfileMap.put(3,"c.log"); System.out.println("logfileMap:"+logfileMap); Map<String,Integer> logfileInverseMap = Maps.newHashMap(); logfileInverseMap=getInverseMap(logfileMap); System.out.println("logfileInverseMap:"+logfileInverseMap); }
Der obige Code kann uns helfen, die Anforderungen der Karteninversion zu erfüllen, es gibt jedoch noch einige Probleme, die wir berücksichtigen müssen:
1. Wie man damit umgeht Situation mit doppelten Werten. Wenn dies nicht berücksichtigt wird, erfolgt ein Überschreiben während der Invertierung.
2. Wenn der invertierten Karte ein neuer Schlüssel hinzugefügt wird, muss die Karte vor der Invertierung einen Wert aktualisieren? Die Zahl der Dinge, die außer dem Geschäftlichen berücksichtigt werden müssen, nimmt zu und der geschriebene Code wird weniger lesbar. Zu diesem Zeitpunkt können wir die Verwendung von BiMap in Guava in Betracht ziehen.
Bimap
Bimap ist sehr einfach zu verwenden. Für das obige Verwendungsszenario können wir es mit sehr einfachem Code implementieren:
[code] @Test public void BimapTest(){ BiMap<Integer,String> logfileMap = HashBiMap.create(); logfileMap.put(1,"a.log"); logfileMap.put(2,"b.log"); logfileMap.put(3,"c.log"); System.out.println("logfileMap:"+logfileMap); BiMap<String,Integer> filelogMap = logfileMap.inverse(); System.out.println("filelogMap:"+filelogMap); }
[code] @Test public void BimapTest(){ BiMap<Integer,String> logfileMap = HashBiMap.create(); logfileMap.put(1,"a.log"); logfileMap.put(2,"b.log"); logfileMap.put(3,"c.log"); logfileMap.put(4,"d.log"); logfileMap.put(5,"d.log"); }
[code] @Test public void BimapTest(){ BiMap<Integer,String> logfileMap = HashBiMap.create(); logfileMap.put(1,"a.log"); logfileMap.put(2,"b.log"); logfileMap.put(3,"c.log"); logfileMap.put(4,"d.log"); logfileMap.forcePut(5,"d.log"); System.out.println("logfileMap:"+logfileMap); } 输出: logfileMap:{5=d.log, 3=c.log, 2=b.log, 1=a.log}
Die inverse Methode gibt eine invertierte BiMap zurück. Beachten Sie jedoch, dass diese invertierte Karte kein neues Kartenobjekt ist, sondern eine Ansichtszuordnung implementiert, also Alle Operationen Das, was Sie an der umgekehrten Karte vornehmen, wirkt sich auf das ursprüngliche Kartenobjekt aus. Zum Beispiel:
[code] @Test public void BimapTest(){ BiMap<Integer,String> logfileMap = HashBiMap.create(); logfileMap.put(1,"a.log"); logfileMap.put(2,"b.log"); logfileMap.put(3,"c.log"); System.out.println("logfileMap:"+logfileMap); BiMap<String,Integer> filelogMap = logfileMap.inverse(); System.out.println("filelogMap:"+filelogMap); logfileMap.put(4,"d.log"); System.out.println("logfileMap:"+logfileMap); System.out.println("filelogMap:"+filelogMap); }
Key-Value Map Impl Value-Key Map Impl Entsprechende BiMap
HashMap HashBiMap
ImmutableMap ap ImmutableBiMap
EnumMap EnumMap EnumBiMap
EnumMap HashMap EnumHashBiMap
Das Obige ist der Inhalt der Java-Class Library-Guava-Bimap. Weitere verwandte Inhalte finden Sie unter PHP chinesische Website (www. php.cn)!