BiMap fournit un nouveau type de collection, qui fournit une structure de données associée bidirectionnelle de clé et de valeur.
Normalement, lorsque nous utilisons Java Map, nous recherchons souvent une valeur via la clé, mais si le scénario suivant se produit, nous devons écrire du code supplémentaire. Tout d’abord, examinons la structure de carte suivante qui représente le numéro d’identification et le nom du fichier.
[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); }
Lorsque nous avons besoin de trouver le nom du fichier par numéro de série, c'est très simple. Mais si nous devons trouver le numéro de série via le nom du fichier, nous devons parcourir la carte. Bien sûr, nous pouvons également écrire une méthode d'inversion de carte pour aider à réaliser la relation de cartographie inversée.
[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); }
Le code ci-dessus peut nous aider à réaliser les exigences d'inversion de carte, mais il reste encore quelques problèmes à prendre en compte :
1. Comment gérer situation de valeurs en double. Si cela n'est pas pris en compte, un écrasement se produira lors de l'inversion
2. Si une nouvelle clé est ajoutée à la carte inversée, la carte avant l'inversion doit-elle mettre à jour une valeur
Dans ce cas, le nombre de choses autres que les affaires qui doivent être prises en compte augmente et le code écrit devient moins lisible. À l’heure actuelle, nous pouvons envisager d’utiliser BiMap dans Guava.
Bimap
Bimap est très simple à utiliser Pour le scénario d'utilisation ci-dessus, nous pouvons l'implémenter avec un code très simple :
[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"); }
logfileMap.put(5, "d.log") lancera java.lang.IllegalArgumentException : valeur déjà présente : erreur dans d.log. Si nous avons vraiment besoin d'insérer des valeurs répétées, nous pouvons choisir la méthode forcePut. Mais ce qu’il faut noter, c’est que la clé précédente sera également écrasée.
[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}
Comprendre la méthode inverse
La méthode inverse renverra un BiMap inversé, mais notez que cette carte inversée n'est pas un nouvel objet cartographique, elle implémente une association de vues, donc Toutes les opérations que vous effectuez sur la carte inversée affectera l'objet cartographique d'origine. Par exemple :
[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); }
Classe d'implémentation de BiMap
Key-Value Map Impl Value-Key Map Impl BiMap correspondant
HashMap HashBiMap
ImmutableMap ap ImmutableBiMap
EnumMap EnumMap EnumBiMap
EnumMap HashMap EnumHashBiMap
Ce qui précède est le contenu de Java-Class Library-Guava-Bimap Pour plus de contenu connexe, veuillez prêter attention au. Site Web chinois PHP (www.php.cn) !