2016-05-08 6 views
0

値に基づいてハッシュマップをソートするコードを作成します。ユーザーは文字列を入力し、出現回数を数えます。文字とその出現は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; 
} 
+3

http://stackoverflow.com/questions/109383/sort-a-mapkey-value-by-values-java?rq=1 – Thilo

+0

あなたはすでに並べ替えを行っているようです - あなたの質問は何ですか? – assylias

+0

@assyliasソートしたいのですが、同じ値を持つ2つ以上の文字がある場合、最初に入力した文字は最初の行になければならず、並べ替えてはいけません。コードでは、すべてが同じ値を持つ場合、アルファベット順にソートされます。 – Meryel

答えて

1

私はそれをソートしたいが、同じ値を持つ2以上がある場合、最初の入力文字は、最初の行にする必要がありますし、ソートすべきではありません。それらはすべて同じ値

使用LinkedHashMapハッシュテーブルと予測可能な繰り返し順序を持つMapインタフェースのリンクリストの実装を、持っている場合、コードでは、アルファベット順に並べ替えます。あなたのcountFrequencyを投稿していなかったので、私は

static Map<Character, Integer> countFrequency(String str) { 
    Map<Character, Integer> map = new LinkedHashMap<>(); 
    for (char ch : str.toCharArray()) { 
     if (map.containsKey(ch)) { 
      map.put(ch, 1 + map.get(ch)); 
     } else { 
      map.put(ch, 1); 
     } 
    } 
    return map; 
} 

、のようなものを書いている私は、

public static void main(String args[]) { 
    Scanner input = new Scanner(System.in); 
    System.out.print("Enter a string: "); 
    String string = input.nextLine(); 
    Map<Character, Integer> sortedMap = sortByComparator(countFrequency(string)); 
    for (Entry<Character, Integer> entry : sortedMap.entrySet()) { 
     System.out.println(entry.getKey() + " : " + entry.getValue()); 
    } 
} 

ようmainを変更し、あなたの入力でそれを実行した、あなたの指定した出力を得ます。

+0

ありがとう、それは動作します! – Meryel

関連する問題