値に基づいてハッシュマップをソートするコードを作成します。ユーザーは文字列を入力し、出現回数を数えます。文字とその出現はhasmapに格納されます。そのキーを気にしないで昇順にソートする必要があります。私のコードでは、すべてが同じ値であれば、アルファベット順にソートされます。同じ値を持っていれば、並べ替えるのは嫌です。
所望の出力:
は、文字列を入力:maabccc
M:1
B:1
:2
C:3
プログラムの出力:maabccc
B:
は、文字列を入力します。 1
M:1
:2
C:3
キーではなく値でハッシュマップをソートする方法
public static void main(String args[]){
System.out.print("Enter a string: ");
string = input.nextLine();
char newChar[] = string.toCharArray();
int count[] = countFrequency(string);
Map<Character, Integer> sortedMap = sortByComparator(hm);
for(Entry<Character, Integer> entry : sortedMap.entrySet()){
System.out.println(entry.getKey() + " : " + entry.getValue());
}
}
public static Map<Character, Integer> sortByComparator(Map<Character, Integer> unsortMap){
List<Entry<Character, Integer>> list = new LinkedList<>(unsortMap.entrySet());
Collections.sort(list, new Comparator<Entry<Character, Integer>>(){
@Override
public int compare(Entry<Character, Integer> o1, Entry<Character, Integer> o2){
return o1.getValue().compareTo(o2.getValue());
}
});
Map<Character, Integer> sortedMap = new LinkedHashMap<>();
for(Entry<Character, Integer> entry : list)
sortedMap.put(entry.getKey(), entry.getValue());
return sortedMap;
}
http://stackoverflow.com/questions/109383/sort-a-mapkey-value-by-values-java?rq=1 – Thilo
あなたはすでに並べ替えを行っているようです - あなたの質問は何ですか? – assylias
@assyliasソートしたいのですが、同じ値を持つ2つ以上の文字がある場合、最初に入力した文字は最初の行になければならず、並べ替えてはいけません。コードでは、すべてが同じ値を持つ場合、アルファベット順にソートされます。 – Meryel