26

HashSet と HashMap で最大の数を見つけたいと思います。HashSet に [22,6763,32,42,33] という数字があり、現在の HashSet で最大の数字を見つけたいとします..どうすればよいですか? HashMap についても同じことが言えます。あなたがそれを手伝ってくれることを願っています。ありがとうございました。

4

8 に答える 8

73

Collections.max(Collection)コレクションから最大の要素を見つけるために使用できます。同様に、 の場合、最大キーまたは最大値のどちらが必要かによって、またはでHashMap同じ方法を使用できます。keySet()values()

また、必要に応じて、要素をソートされたキー順に格納するTreeSetand を代わりに使用できます。TreeMap

于 2013-02-12T11:06:41.113 に答える
7

HashSet/を使用せざるを得ない場合は、最大値を見つけるために/HashMap全体をスキャンする必要があります。のようなライブラリ関数は、このように行います。HashSetHashMapCollections.max()

最大値の取得が必要O(1)で、使用されているコレクションのタイプを変更できる場合は、ソートされたセット/マップ (例: TreeSet/ TreeMap) を使用します。

于 2013-02-12T11:07:04.390 に答える
2

このようなもの:

Set<Integer> values = new HashSet<Integer>() {{
    add(22);
    add(6763);
    add(32);
    add(42);
    add(33);
}};
int maxValue = Integer.MIN_VALUE;
for (int value : values) {
    if (value > maxValue) {
        maxValue = value;
    }
}

この:

Map<String, Integer> values = new HashMap<String, Integer>() {{
    put("0", 22);
    put("1", 6763);
    put("2", 32);
    put("3", 42);
    put("4", 33);
}};
int maxValue = Integer.MIN_VALUE;
for (int value : values.values()) {
    if (value > maxValue) {
        maxValue = value;
    }
}
于 2013-02-12T11:08:16.173 に答える
0

これは、あなたが求めていることを行う簡単な方法です:

  public String getMapKeyWithHighestValue(HashMap<String, Integer> map) {
    String keyWithHighestVal = "";

    // getting the maximum value in the Hashmap
    int maxValueInMap = (Collections.max(map.values()));

    //iterate through the map to get the key that corresponds to the maximum value in the Hashmap
    for (Map.Entry<String, Integer> entry : map.entrySet()) {  // Iterate through hashmap
        if (entry.getValue() == maxValueInMap) {

            keyWithHighestVal = entry.getKey();     // this is the key which has the max value
        }

    }
    return keyWithHighestVal;
}
于 2016-09-17T21:27:03.080 に答える
0

TreeMap の場合、キー/値がランダムに挿入されることがわかっている場合、ツリーは多かれ少なかれバランスが取れています。ツリーは不均衡になり、データが既にソートされた順序で挿入されると、特定の要素をすばやく見つける (または挿入または削除する) 機能が失われます。アンバランス ツリーの場合、n、O(n)、そうでない場合は O(1) に比例して時間がかかります。

于 2013-02-12T11:29:04.670 に答える
0

Apache Commons Mathの使用を検討してください。ここにAPI ドキュメントがあります。
対象のクラスはSummaryStatisticsです。sで動作しdouble、オンザフライで最大値、最小値、平均値などを計算します (値を追加すると)。データ値はメモリに格納されないため、このクラスを使用して非常に大きなデータ ストリームの統計を計算できます。

于 2014-10-03T06:46:15.670 に答える