Ho un HashMap come questo:In Java, mappa sorta di hash per la sua key.length()
HashMap<String,Integer> map = new HashMap<String,Integer>();
map.put("java",4);
map.put("go",2);
map.put("objective-c",11);
map.put("c#",2);
Ora voglio ordinare questa mappa per la sua lunghezza della chiave, se due chiavi di lunghezza sono uguali (ad esempio, vai C# entrambi lunghezza 2), quindi ordinati per ordine alphba. modo che il risultato mi aspetto di ottenere è qualcosa di simile:
risultato stampato: Objective-C, 11 Java, 4 C#, 2 go, 2
qui è la mia attamp, ma doesnt funziona affatto ...
HashMap<String,Integer> map = new HashMap<String,Integer>();
map.put("java",4);
map.put("go",2);
map.put("objective-c",11);
map.put("c#",2);
Map<String,Integer> treeMap = new TreeMap<String, Integer>(
new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
return s1.length().compareTo(s2.length());
}
}
);
in realtà il metodo 'compareTo' compare in rosso (non essere in grado di compilare) .... per favore qualcuno mi aiuti con qualche esempio di codice ... io sono un po 'di confusione con come utilizzare la classe di confronto per personalizzare il compa re oggetto ...
quando si esegue il codice, il risultato è {C# = 2, java = 4, Objective-C = 11}. la domanda è dove è il "go", 2? –
È dovuto al fatto che TreeMap sta usando Comparator e il comparatore è definito per trattare 2 stringhe della stessa lunghezza uguale. Dato che OP stava giocando con TreeMap, ho esteso la sua risposta per correggere solo la parte Comparator. – sol4me
oh cool cosa ne pensi della mia risposta? dal momento che l'op non ha menzionato che l'uso di treemap è obbligatorio, ho usato un altro stile –