【问题标题】:Check if a value exists in between a key and its value in hash table检查一个值是否存在于一个键和它在哈希表中的值之间
【发布时间】:2013-06-28 08:28:41
【问题描述】:

如何检查一个值是否存在于一个键和它在哈希表中的值之间?

我想检查一个值是否存在于哈希表中或任何键与其值之间

我使用以下代码检查值是否作为键或值存在

if(table.containsKey(val) || table.containsValue(val))

但是如何检查它是否存在于任何键与其对应的值之间?

【问题讨论】:

  • 你能澄清“在任何一个键和它对应的值之间”吗?
  • @user2133404 在我看来像是迭代器问题;如果你知道如何使用它们。
  • 假设如果值为6。如果哈希表包含键5和值8,它应该返回true
  • 标题中无需添加major标签。
  • @user2133404 你想要什么。我以这种方式得到了你想要找到值= x 的哈希表键并找到键= x 的哈希表值。对吗?

标签: java hashtable contains


【解决方案1】:

所以基本上你想要展平地图并检查给定值是否包含在最低键或值与最大键或值之间的范围内。

您可以将所有键和值放在a SortedSet 中,例如TreeSet,它具有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());

您可以与地图并行填充集合以提高效率,以避免为每个查询重新创建一个集合。

【讨论】:

    【解决方案2】:

    试试这个,

    1. 迭代哈希表
    2. 将键和值存储在 diff temp 中
    3. 然后比较 tempkey 和 tempvalue 之间的值

    【讨论】:

      【解决方案3】:

      这也有效:

      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;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-09-07
        • 2013-02-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多