0

重複の可能性:
マップ内の各エントリを反復処理するにはどうすればよいですか?

文字列の配列である入力(データ)を受け取り、出現頻度の順に返し、入力に出現数が同じ場合はアルファベット順に返すプログラムを作成しています。HashMapを使用して、各文字列を配列に表示される回数にマップしました。その後、forループを使用して各表示回数を繰り返すことを考えましたが、次のようなコマンドを見つけることができません。ハッシュマップ内の一意の値の数を返します。誰かがこの値を取得する方法を知っていますか?

また、私が説明したタスクを実行するためのより簡単な方法がある場合は、アドバイスを歓迎します。

    HashMap<String, Integer> sortmap = new HashMap<String, Integer>();
    ArrayList<String> stringlist = new ArrayList<String>();
    ArrayList<String> stringlist2 = new ArrayList<String>();
    for(String x : data)
    {
        if(sortmap.containsKey(x)){
            sortmap.put(x, sortmap.get(x)+1);
        }
        else{
            sortmap.put(x, 1);
        }
    }
    for (String s : sortmap.keySet()){
        for (int i : sortmap.values()){
            if (sortmap.get(s) == i){
                stringlist2.add(s);
            }
        }
    }
4

2 に答える 2

1

最後のダブルループは非常に残念です。

sortmap.entrySet()を取得し、配列に格納します。次に、最初にカウンターを考慮し、それらが等しい場合は文字列をアルファベット順に比較する独自のコンパレーターを使用して、Arrays.sortでその配列をソートします。

于 2012-09-26T04:12:48.287 に答える
0

私はそれを理解しました-これが疑問に思っていた人々のための完全な論理です:

public String[] sort(String[] data) {
    TreeMap<String, Integer> sortmap = new TreeMap<String, Integer>();
    ArrayList<String> stringlist = new ArrayList<String>();
    for(String x : data){
        if(sortmap.containsKey(x))
            sortmap.put(x, sortmap.get(x)+1);
        else
            sortmap.put(x, 1);
    }
    Arrays.sort(sortmap.values().toArray(), 0, sortmap.size());
    for (int i = data.length; i > 0; i--){
        for (Entry<String, Integer> k : sortmap.entrySet()){
            if (k.getValue() == i)
                stringlist.add(k.getKey());
        }
    }
    String[] output = stringlist.toArray(new String[stringlist.size()]);
    return output;
}
于 2012-09-26T04:04:35.573 に答える