ハッシュテーブルのキーとその値の間に値が存在するかどうかを確認する方法は?
値がハッシュテーブルに存在するかどうか、またはキーとその値の間に存在するかどうかを確認したい
次のコードを使用して、値がキーまたは値として存在するかどうかを確認しました
if(table.containsKey(val) || table.containsValue(val))
しかし、キーとそれに対応する値の間に存在するかどうかを確認するにはどうすればよいでしょうか?
したがって、基本的には、マップを平坦化し、特定の値が最小のキーまたは値と最大のキーまたは値の間の範囲に含まれているかどうかを確認します。
すべてのキーと値をaSortedSet
に入れることができます。たとえば、 aTreeSet
には、最低/最高のアイテムを取得するための メソッドfirst()
とメソッドがあります。last()
次のようになります。
SortedSet<Integer> set = new TreeSet<> ();
set.addAll(map.keySet());
set.addAll(map.values());
//return true if input within the range
return (input >= set.first() || input <= set.last());
クエリごとにセットを再作成することを避けるために、効率のためにマップと並行してセットを設定できます。
これも機能します:
public static <T extends Comparable> boolean hasValueBetween(Map<T, T> map, T value) {
for(Map.Entry<T, T> entry : map.entrySet()) {
if (entry.getKey().compareTo(value) <= 0 && entry.getValue().compareTo(value) >= 0) {
return true;
}
}
return false;
}
Try this,