关于java:HashMap在多个键中搜索特定值

HashMap Searching For A Specific Value in Multiple Keys

我正在检查我的HashMap中是否存在密钥,如果存在,我还要检查是否有任何其他密钥的值与我检查过的原始密钥的名称相同。

例如我有这个。

1
2
3
4
5
6
7
System.out.println("What course do you want to search?");
    String searchcourse = input.nextLine();
boolean coursefound = false;

if(hashmap.containsKey(searchcourse) == true){
    coursefound = true;
        }

这将检查我的hashmap中是否存在该键,但现在我需要检查特定值的每个键的值,在本例中为字符串搜索字符串。

通常我会使用一个基本的for循环来迭代这样的东西,但它不适用于HashMaps。 我的值也存储在String ArrayList中,如果有帮助的话。


您将需要查看HashMap中的每个条目。 此循环应检查searchcourse的ArrayList的内容,并打印出包含该值的键。

1
2
3
4
5
for (Map.Entry<String,ArrayList> entries : hashmap.entrySet()) {
    if (entries.getValue().contains(searchcourse)) {
        System.out.println(entries.getKey() +" contains" + searchcourse);
    }
}

以下是相关的javadoc:

Map.Entry的

HashMap entrySet方法

ArrayList contains方法


据我了解您的问题,地图中的值List。 也就是说,您的Map声明为Map>。 如果是这样:

1
2
3
4
5
for (List<String> listOfStrings : myMap.values()) [
  if (listOfStrings .contains(searchcourse) {
    // do something
  }
}

如果值只是字符串,即Map是Map,则@Matt具有简单的答案。


您可以拥有双向地图。 例如。 您可以使用Map>或MultiMap作为键的值,或者您可以使用计划添加到Guava的双向映射。