Pergunta

Eu queria saber se existe uma classe lá fora, que implementa ambos os Map e List interfaces em Java.

Eu tenho uma estrutura de dados que é essencialmente um Map. I mapear cordas (IDS) para Images. Mas em uma parte específica do meu código, eu preciso apresentar o usuário com toda a Images IDed disponível. A única maneira de fazer isso até agora é escrever isto:

for (String id : myMap.keySet()) {
    // get the image like this "myMap.get(id)" 
}

Portanto, seria bom ter uma classe que implementa tanto Map e List então eu poderia simplesmente escrever:

for (Image img : myMap) {
  // the image is img
}

Alguém sabe de tal implementação?

Editar : Depois de ver as respostas (que estão todos corretos, votou-se), agora eu percebo que eu também precisaria do mapa a ser classificado. Quando eu digo "classificadas", tudo o que eu quero dizer é que eu gostaria que ele tem os valores em uma ordem específica, que eu seria capaz de modificar. Eu sei que esta não é a questão original, mas eu só percebi que eu preciso disso.

EDIT 2 : Parece que eu sou indeciso. O que eu preciso é um mapa ordenado, não um ordenado. Desculpe pela confusão, as pessoas.

Foi útil?

Solução

Se você precisa de seus itens em uma ordem específica, LinkedHashMap é seu amigo - que mantém os itens na ordem de inserção. TreeMap vai manter seus itens em uma ordem definida por qualquer um comparador você dá ou um método compareTo da chave.

Outras dicas

Para uma ordenou Mapa, olhada na LinkedHashMap . Que manterá suas chaves na ordem de inserção.

Se você usar um SortedMap -lo irá manter as chaves na ordem de classificação. (A TreeMap é a implementação mais comum. )

O que você pode usar é map.entrySet(). Isso permitirá que você iterate sobre o conjunto de MapEntries.

Confira o javadoc para um pouco mais informações.

Você já tenho um monte de respostas práticas. Mas responder diretamente a pergunta ...

Eu estava vagando se há uma classe lá fora, que implementa ambos Mapa e Lista interfaces em Java.

... vale a pena mencionar que é simplesmente impossível. método remove(Object) é o obstáculo.

Em Map interface de sua assinatura é:

V remove(Object key);

E em List interface de que de:

boolean remove(Object o);

Você pode usar o Map.values() método , que retorna um Collection.

Isto dá-lhe uma coleção dos valores armazenados

myMap.values()

Tente isto:

for (Image img : myMap.values()) {
    // the image is img
}

Para olhar mapa classificada em java.util.SortedMap implementações. java.util.TreeMap é o mais frequentemente escolha. Se você precisa apenas garantida iteração encomendar você pode tentar java.util.LinkedHashMap . Ele oferece iteração na mesma ordem que você colocar elementos para mapear. Ou, opcionalmente, com o objetivo último acesso. Se você gostaria de mover-chave (uma vez adicionado) para o final do mapa, você deve removê-lo explicitamente e colocar novamente.

Você pode usar um TreeMap ele é classificado de acordo com a ordem natural das suas chaves, ou por um comparador fornecido no momento da criação do mapa:

TreeMap<String, Image> mapByName = new TreeMap<String, Image>(new ByNameComparator());

onde ByNameComparator () é um comparador. Alternativamente, você pode usar os valores () methond e tipo usando Collections.sort ():

Collection<Image> images = mapByName.values();
Collections.sort(images, new BySizeComparator());
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top