Domanda

Mi chiedevo se esiste una classe là fuori che implementa le interfacce Map e List in Java.

Ho una struttura di dati che è principalmente una Mappa . Mappare le stringhe (ID) su Image s. Ma in una parte specifica del mio codice, devo presentare all'utente tutte le immagini IDed disponibili. L'unico modo per farlo finora è scrivere questo:

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

Quindi sarebbe bello avere una classe che implementa sia Map che List così potrei semplicemente scrivere:

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

Qualcuno conosce tale implementazione?

MODIFICA : dopo aver visualizzato le risposte (tutte corrette, votate), ora mi rendo conto che avrei anche bisogno di ordinare la mappa. Quando dico "ordinato", tutto ciò che intendo è che mi piacerebbe che avesse i valori in un ordine specifico, che avrei potuto modificare. So che questa non è la domanda originale, ma ho appena capito che ne avevo bisogno.

MODIFICA 2 : sembra che io sia indeciso. Ciò di cui ho bisogno è una mappa ordinata, non ordinata. Ci scusiamo per la confusione, gente.

È stato utile?

Soluzione

Se hai bisogno dei tuoi articoli in un ordine specifico, LinkedHashMap è tuo amico: mantiene gli articoli in ordine di inserimento. TreeMap manterrà i tuoi articoli in un ordine definito da un Comparatore che dai o da un metodo compareTo della chiave.

Altri suggerimenti

Per una mappa ordinata, guarda il LinkedHashMap . Ciò manterrà le tue chiavi nell'ordine di inserimento.

Se si utilizza un SortedMap manterrà le chiavi in ??ordine. (La TreeMap è l'implementazione più comune.)

Quello che puoi usare è map.entrySet () . Ciò ti consentirà di scorrere il Set di MapEntries.

Dai un'occhiata al javadoc per qualche informazione in più.

Hai già un sacco di risposte pratiche. Ma rispondendo direttamente alla domanda ...

  

Stavo vagando se c'è una classe là fuori che implementa entrambe le interfacce Map ed List in Java.

... vale la pena ricordare che è semplicemente impossibile. Il metodo remove (Object) è l'ostacolo.

Nell'interfaccia Mappa la sua firma è:

V remove(Object key);

E nell'interfaccia List è:

boolean remove(Object o);

puoi utilizzare < code> Map.values ??() , che restituisce un Collection .

Questo ti dà una raccolta dei valori memorizzati

myMap.values()

Prova questo:

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

Per la mappa ordinata, consulta java .util.SortedMap implementazioni. java.util.TreeMap è la scelta più spesso. Se hai bisogno di un ordine di iterazione garantito, puoi provare java.util.LinkedHashMap . Offre iterazione nello stesso ordine in cui metti gli elementi sulla mappa. O, facoltativamente, nell'ultimo ordine consultato. Se desideri spostare la chiave (una volta aggiunta) alla fine della mappa, devi rimuoverla esplicitamente e inserirla di nuovo.

puoi utilizzare una TreeMap è ordinato in base all'ordinamento naturale delle sue chiavi o da un comparatore fornito al momento della creazione della mappa:

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

dove ByNameComparator () è un comparatore. In alternativa puoi usare i valori () methond e ordinare usando Collections.sort ():

Collection<Image> images = mapByName.values();
Collections.sort(images, new BySizeComparator());
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top