Pergunta

Qual é a melhor maneira de implementar um HashMap três produto? Por exemplo, eu gostaria de usar uma chave de Cordas regular, mas tem que mapear a dois objetos diferentes. A idéia é como ter uma lista de listas, exceto que o primeiro item é uma chave.

Eu estou tentando evitar a iteração através da lista (de modo que o comportamento é como uma hashmap). Você concorda a única maneira é construir uma nova classe? Parece um objeto "HashMap3" (com métodos de get1 (key) & get2 (chave)) seria útil. Não tenho a certeza de como configurar isso mesmo.

Como posso criar a coleção?

Foi útil?

Solução

Se a chave sempre será mapeado para exatamente dois objetos, em seguida, a maneira mais fácil de fazer isso é fazer uma classe Pair que existe apenas para manter os dois objetos. Então você usa o seu String como a chave ea instância Pair como o valor. No entanto, se a chave pode mapear para arbitrariamente muitos objetos, em seguida, IMO a melhor maneira de fazer isso é ter o valor armazenado no Map ser um Collection de algum tipo.

Outras dicas

olhada no Google-coleções Multimap

Uma coleção semelhante a um mapa, mas que pode associar vários valores com uma única chave. Se você chamar put (K, V) duas vezes, com a mesma chave, mas valores diferentes, multimap contém mapeamentos da chave para ambos valores.

A hash hashes talvez?

Eu concordo com Eddie, e só tinha um problema semelhante apenas com muitos valores, e não dois. Eu queria um Java ConcurrentHashMap a realização de uma XML esconderijo de documentos que estão sendo buscados de um serviço web, e eu precisava para gravar várias peças de informação ao lado do XML para apoiar as estratégias de despejo do Cache (por exemplo, Least Recently Used, Least Frequently Used).

A solução foi apenas para definir uma classe de objeto que contém esses itens. Eu usei um dentro classe aninhada privada da minha classe Cache, algo como isto:

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

O ConcurrentHashMap foi digitado na URI e ficou assim:

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

Este código adiciona um novo documento XML para o cache:

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: Se você precisa mapear a chave para um List de n objetos em Java, você pode colocar os objetos em um java.util.collections.ArrayList e usar o ArrayList como o valor Mapa. ??

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top