以下のようなJavaのハッシュテーブルがあり、最小値のキーを取得しようとしています。明らかに、私はそれを見つけるためにすべての要素を反復することができますが、それを行うためのより簡単な方法はありますか?
Hashtable<Object, Integer> hash= new Hashtable<Object, Integer>();
ハッシュテーブルを使用する、いいえ。ただし、代わりにを使用することもできますTreeMap
。
赤黒木ベースの
NavigableMap
実装。マップは、使用されるコンストラクターに応じて、キーの自然な順序に従って、またはマップ作成時に提供されるコンパレーターによってソートされます。
firstKey()
それはあなたが望む正確な機能を提供
する方法を持っています。
Grr、値、キーではありません。いいえ、繰り返す必要があります。
その場合、逆の関連付けを保存するには、別のマップ(マルチマップ?)を使用する必要があります。
Map<Object, Integer> hash= new Hashtable<Object, Integer>();
SortedSetMultimap<Integer, Object> reverse = TreeMultimap.create();
あなたが入れるときはいつでもkey
、value
何かを入れてhash
、また入れてvalue
、。次に、を使用して最小値を取得しますkey
reverse
reverse.keySet().first()
(このソリューションにはGuavaが必要です)
自分で繰り返す代わりに、ライブラリ関数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()
);
}
それを行う最も簡単な方法は、実際には要素を反復処理することのように見えます。ハッシュテーブル名がハッシュの場合:
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();
}
}
最小値もこの方法で見つけることができます、
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());
キーの例を整数として取り上げました。