2011-01-14 13 views
3
String[] numbers = new String[] {"3", "4", "s", "a", "c", "h", "i", "n", "t", "e", "n", "d", "u", "l", "k"}; 
Map<String, Integer> map = new HashMap<String, Integer>(); 
for (int i = 0; i < numbers.length; i++) { 
    String key = numbers[i]; 
    if (map.containsKey(key)) { 
     int occurrence = map.get(key); 
     occurrence++; 
     map.put(key, occurrence); 
    } else { 
     map.put(key, 1); 
    }// end of if else 
}// end of for loop 
Iterator<String> iterator = map.keySet().iterator(); 
while (iterator.hasNext()) { 
    String key = iterator.next(); 
    int occurrence = map.get(key); 
    System.out.println(key + " occur " + occurrence + " time(s)."); 
} 

Dieses Programm versucht, die Anzahl der Vorkommen einer Zeichenfolge zu zählen. Wenn ich es ausführe, bekomme ich die Antwort, aber die Ausgabe ist nicht in der ursprünglichen Reihenfolge, es ist gemischt. Wie kann ich die Strings in der ursprünglichen Reihenfolge ausgeben?Drucken der Ergebnisse in der ursprünglichen Reihenfolge

+1

Es ist eine Implementierung der Karte, die Erhalter um dokumentiert. :) –

+1

** ahem ** http://stackoverflow.com/editing-help –

Antwort

4

HashMap garantiert keine Anzeigenreihenfolge. Vielleicht versuchen LinkedHashMap

+0

Lesen: Grundlegende map/set Datenstrukturen geben normalerweise keine Garantie über die Reihenfolge der aufgezählten Schlüssel. –

+0

Danke Davin ... Es hat funktioniert – Sam

0

Mit java.util.TreeMap, es implementiert SortedMap-Schnittstelle, können Sie den Komparator bereitstellen. Verwenden Sie firstKey(), um den kleinsten Schlüssel zu erhalten, verwenden Sie ihn, um den Wert zu erhalten, und entfernen Sie ihn von der Karte und wiederholen Sie den Anruf von firstKey()

0

Wie erwähnt, verwenden Sie eine LinkedHashMap.

Auch können Sie die "foreach" Schleife in Java verwenden und ersetzen:

Iterator<String> iterator = map.keySet().iterator(); 
while (iterator.hasNext()) { 
    String key = iterator.next(); 
    int occurrence = map.get(key); 
    System.out.println(key + " occur " + occurrence + " time(s)."); 
} 

Mit

for(String key: map.keySet()) { 
    int occurrence = map.get(key); 
    System.out.println(key + " occur " + occurrence + " time(s)."); 
} 
0

Alles, was Sie tun müssen, ist eine andere Map-Implementierung verwenden (wie pro andere Kommentare) . Sie können eine einzelne Zeile ändern, um das zu tun, was Sie brauchen.

von

Map<String, Integer> map = new HashMap<String, Integer>(); 

zu

Map<String, Integer> map = new LinkedHashMap<String, Integer>(); 
+0

Ja, ich habe es getan und es hat funktioniert .... danke – Sam

Verwandte Themen