6

以下のようなJavaのハッシュテーブルがあり、最小値のキーを取得しようとしています。明らかに、私はそれを見つけるためにすべての要素を反復することができますが、それを行うためのより簡単な方法はありますか?

Hashtable<Object, Integer> hash= new Hashtable<Object, Integer>();
4

4 に答える 4

10

ハッシュテーブルを使用する、いいえ。ただし、代わりにを使用することもできますTreeMap

赤黒木ベースのNavigableMap実装。マップは、使用されるコンストラクターに応じて、キーの自然な順序に従って、またはマップ作成時に提供されるコンパレーターによってソートされます。

firstKey()それはあなたが望む正確な機能を提供 する方法を持っています。


Grr、値、キーではありません。いいえ、繰り返す必要があります。

その場合、逆の関連付けを保存するには、別のマップ(マルチマップ?)を使用する必要があります。

Map<Object, Integer> hash= new Hashtable<Object, Integer>();
SortedSetMultimap<Integer, Object> reverse = TreeMultimap.create();

あなたが入れるときはいつでもkeyvalue何かを入れてhash、また入れてvalue、。次に、を使用して最小値を取得しますkeyreversereverse.keySet().first()

(このソリューションにはGuavaが必要です)

于 2012-10-02T14:59:35.543 に答える
3

自分で繰り返す代わりに、ライブラリ関数Collections.min(Collection、Comparator)を上で使用できますentrySet()

サンプル

public static void main(String[] args) {


    HashMap<String,Integer> map = new HashMap<String,Integer>();

    map.put("A", 1);
    map.put("B", 2);
    map.put("C", 3);

    System.out.println( 

    Collections.min(map.entrySet(), new Comparator<Map.Entry<String,Integer>>() {

        @Override
        public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) {

            return o1.getValue().intValue() - o2.getValue().intValue();

        }})

        .getKey()


    );
}
于 2012-10-02T15:12:59.083 に答える
0

それを行う最も簡単な方法は、実際には要素を反復処理することのように見えます。ハッシュテーブル名がハッシュの場合:

Object minObj= null;
int min= Integer.MAX_VALUE;
for(Map.Entry<Object, Integer> x: hash.entrySet()){
    if(x.getValue() < min){
            min= x.getValue();
            minObj= x.getKey();
    }
}
于 2012-10-02T15:24:26.120 に答える
0

最小値もこの方法で見つけることができます、

    Hashtable h = new Hashtable();
    h.put(10, "aaa");
    h.put(1, "aab");
    h.put(12, "aabwqkjdg");

    Set set = h.keySet();

    TreeSet treeSet= new TreeSet();
    treeSet.addAll(set);

    System.out.println("Last :"+treeSet.first());

キーの例を整数として取り上げました。

于 2012-10-02T15:38:57.983 に答える