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中,如果有帮助的话。
-
docs.oracle.com/javase/6/docs/api/java/util/… 像那样?
-
它表示它返回true,如果任何键共享相同的值,我还想打印出哪些特定键具有该值。
-
真正的快速评论 - 抱歉,如果它不是非常有用,但你可以简单地写coursefound = hashmap.containsKey(searchcourse)并删除if语句。
-
basic for loop to iterate through something like this, but it doesn't work with HashMaps.嗯,什么? 你可以使用for循环迭代哈希映射就好了。 更具体地说,是键集,值集或入口集。
您将需要查看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方法
-
我相信他的价值观是字符串列表,所以这是行不通的。但需要OP做出一些澄清。
-
键的值保存在一个填充了字符串的ArrayList中。
-
那么,当我去map.get(searchcourse)时,我会得到一个String或一个ArrayList吗?只想清楚。
-
我需要知道哪些键具有该值,所以containsValue(searchcourse);会给我真/假,但它不会让我知道哪些键具有这些值。正确?
-
你想要返回的密钥只需要在他们的ArrayList中找到搜索过的课程,对吗?
-
对,那是正确的。
-
更新了这些说明
据我了解您的问题,地图中的值List。 也就是说,您的Map声明为Map>。 如果是这样:
1 2 3 4 5
| for (List<String> listOfStrings : myMap.values()) [
if (listOfStrings .contains(searchcourse) {
// do something
}
} |
如果值只是字符串,即Map是Map,则@Matt具有简单的答案。
-
values()仅返回值。这不是很有用,因为OP需要包含searchcourse值的键。在这种情况下你如何跟踪密钥?
-
他还想看看这些价值观。看起来你终于在你的答案中整理出来......
您可以拥有双向地图。 例如。 您可以使用Map>或MultiMap作为键的值,或者您可以使用计划添加到Guava的双向映射。
-
"计划加入"? BiMap已有几年历史了。
-
@LouisWasserman好点,现在可以买到一对一的双向地图。计划AFAIK的一对多双向地图。
-
ImmutableSetMultimap已经提供了inverse()方法。