Question

Je suis tombé sur un code récemment au travail (recréée être semblable à ce que je traite) similaire au code ci-dessous

Est-il possible que je peux retravailler le code ci-dessous pour utiliser une structure de données (avec des performances à l'esprit)?

Voici un code pour illustrer ce que je veux dire:

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);
    }


}
Était-ce utile?

La solution

Ceci est une réponse ici avec la recommandation d'utiliser BiMap de Google Collections

Autres conseils

collections Apache prend en charge un BidiMap interface et une variété d'implémentations assez efficaces.

Vous pouvez utiliser un seul pour faire les deux Map<Object,Object> applications. Laid, bien sûr. Les performances devraient être à peu près le même, ou un peu mieux dans le cas peu probable que vous avez beaucoup de valeurs ObjectMapper quelques cartographiés.

Vous pouvez utiliser BiMap de Eclipse Collections .

BiMap est une carte qui permet aux utilisateurs d'effectuer des recherches dans les deux directions. Les deux clés et les valeurs d'une BiMap sont uniques.

La mise en œuvre principale est HashBiMap.

inverse()

BiMap.inverse() retourne une vue où la position du type de clé et le type de valeur sont inversés.

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() se comporte comme sur une carte Map.put() régulière, sauf qu'il jette lorsqu'une valeur en double est ajouté.

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()

se comporte comme <=>, mais il supprime silencieusement l'entrée de carte avec la même valeur avant de mettre la paire valeur clé dans la carte.

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);

Remarque:. Je suis un validateur pour les collections Eclipse

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top