Pregunta

¿Cuál es la mejor manera de implementar un hashMap de tres elementos? Por ejemplo, me gustaría usar una clave de cadena normal, pero hacer que se asigne a dos objetos diferentes. La idea es como tener una lista de listas, excepto que el primer elemento es una clave.

Estoy tratando de evitar iterar a través de la lista (por lo que el comportamiento es como un hashmap). ¿Estaría de acuerdo en que la única forma es construir una nueva Clase? Parece un " HashMap3 " Objeto (con métodos de get1 (clave) & amp; get2 (clave)) sería útil. No estoy seguro de cómo configurar esto yo mismo.

¿Cómo puedo crear la colección?

¿Fue útil?

Solución

Si la clave siempre se asignará a exactamente dos objetos, entonces la forma más fácil de hacerlo es crear una clase Pair que exista solo para contener los dos objetos. Luego usa su String como la clave y la instancia de Pair como el valor. Sin embargo, si la clave puede correlacionarse arbitrariamente con muchos Objetos, entonces IMO, la mejor manera de hacerlo es tener el valor almacenado en el Map ser una Collection de algún tipo.

Otros consejos

Mire google-collections Multimap

  

Una colección similar a un Mapa, pero   que puede asociar múltiples valores   con una sola llave Si llamas put (K,   V) dos veces, con la misma clave pero   diferentes valores, el multimapa   contiene asignaciones de la clave a ambos   valores.

A hash de hashes quizás?

Estoy de acuerdo con Eddie, y tuve un problema similar solo con muchos valores, no con dos. Quería un Java ConcurrentHashMap para contener un XML de caché de documentos que se obtienen de un servicio web, y necesitaba registrar varias piezas de información junto con el XML para admitir las estrategias de desalojo del caché (por ejemplo, Menos utilizado recientemente, Menos utilizado con frecuencia).

La solución fue simplemente definir una clase de objeto que contenga esos elementos. Utilicé una clase privada anidada dentro de mi clase de caché, algo así:

private static class CacheEntry
{
    private String  uri;          // Key
    private String  fetched_xml;  // The XML document (main value)
    private long    put_time;
    private long    expires_time;
    private long    size;
    private long    hits;
    private long    last_used_time;
}

El ConcurrentHashMap se introdujo en el URI y se veía así:

private final Map<String, CacheEntry> cache;
    [...]
cache = new ConcurrentHashMap<String, CacheEntry>(100, 0.75f, 3);

Este código agrega un nuevo documento XML al caché:

CacheEntry value = new CacheEntry();
value.fetched_xml(fetched_xml); 
value.uri = uri;
value.put_time = System.currentTimeMillis();
value.expires_time = representation.getExpirationDate().getTime();
value.size = bytes_fetched;
value.hits = 0;
value.last_used_time = 0;
cache.put(uri, value);

Editar: Si necesita asignar una clave a una Lista de n objetos en Java, puede colocar esos objetos en java.util.collections.ArrayList y use ArrayList como el valor del Mapa. ??

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top