Ich versuche, eine Karte basierend auf Worthäufigkeit (d. H. Basierend auf Wert) zu sortieren. Dafür habe ich Komparator überschrieben und an TreeMap
übergeben, aber ich bekomme diese seltsame Ausgabe.Beim Sortieren der Karte basierend auf dem Wert fehlen einige Werte. Was verursacht dieses seltsame Verhalten?
public class WordFrequency {
public static String sentence = "one three two two three three four four four";
public static Map<String, Integer> map;
public static void main(String[] args) {
map = new HashMap<>();
String[] words = sentence.split("\\s");
for (String word : words) {
Integer count = map.get(word);
if (count == null) {
count = 1;
} else {
++count;
}
map.put(word, count);
}
Comparator<String> myComparator = new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
if (map.get(s1) < map.get(s2)) {
return -1;
} else if (map.get(s1) > map.get(s2)) {
return 1;
} else {
return 0;
}
}
};
SortedMap<String, Integer> sortedMap = new TreeMap<String, Integer>(myComparator);
System.out.println("Before sorting: " + map);
sortedMap.putAll(map);
System.out.println("After Sorting based on value:" + sortedMap);
}
}
Ausgang:
Before sorting: {two=2, one=1, three=3, four=3}
After sorting based on value:{one=1, two=2, three=3}
Erwartete Ausgabe:
{one=1, two=2, four=3,three=3}
Was ist komisch daran? –
Möglicherweise TreeMap nicht erlaubt Duplikate –
@SotiriosDelimanolis vier = 3 fehlt nach dem Sortieren –