0
文字を整数にマップするHashMapがあります。値でソートするために、私はコンパレータを書き、私はTreeMapを使っています。しかし、私は価値を欠いている。私はString "tree"をチェックしました。各ループの後のマップ 'chars'は{r = 1、t = 1、e = 2}のようになり、putAll(2行後)の後のツリーは{e = 2、r = 1}になります。 char 't'に何が起こっていますか?なぜそれが欠けているのですか?そして私はそれをどのように変更できますか?putAll()後のTreeMapの値がありません
class ValueComparator implements Comparator<Character> {
private Map<Character, Integer> map;
public ValueComparator(Map<Character, Integer> map) {
this.map = map;
}
public int compare(Character a, Character b) {
return map.get(b).compareTo(map.get(a));
}
}
public String frequencySort(String s) {
if (s.length() <= 1) return s;
HashMap<Character,Integer> chars = new HashMap<Character,Integer>();
for(Character c : s.toCharArray()){
if (chars.containsKey(c)){
chars.put(c,chars.get(c)+1);
}
else {
chars.put(c,1);
}
}
TreeMap<Character,Integer> tree = new TreeMap<Character,Integer>(new ValueComparator(chars));
tree.putAll(chars);
/**
* rest of the code
**/
}
あなたのコンパレータを簡単な修正は、タイブレーカーとしてキーを使用することです「r」と「t」は等しいとみなします。マップには、等しいキーの2つのエントリがありません。 – user2357112
私はそれを得る。しかし、私はそれについて何をすべきかわからない...あなたは私にヒントを与えることができますか? – Malvinka
ソートを行うためにTreeMapを使用しないことをお勧めします。 – user2357112