Ordenou a execução Lista Mapa em Java
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 Image
s. 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.
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());