如何“搜索”HashMap然后循环结果?

时间:2012-08-18 19:38:16

标签: java hashmap

所以,我编写了一些java。并且想要搜索HashMap然后循环结果,这是我的hashmap:

public HashMap<String, String> messages;

BUT!我不想循环使用alle键,只是一些。就像搜索MySQL数据库一样。

对不起我的英语,即挪威语。

4 个答案:

答案 0 :(得分:2)

如果我理解正确,你想要遍历HashMap的键。为此,您需要使用Map.keySet()方法。这将返回Set,其中包含地图的所有键。或者,您可以遍历entrySetvalues。 (请查看所有提供的链接以获取更多详细信息。)

此外,我强烈建议您查看the Tutorial trail on Collections。您还应该熟悉Java API docs。特别是,您需要查看HashMapMap的文档。

答案 1 :(得分:0)

equals课程中正确实施hashcode Block,并在get(Object key)上调用Hashmap方法,然后进行搜索。

答案 2 :(得分:0)

如果您想访问所有密钥并获取值。

public HashMap<String, String> messages;
...
for (final String key : messages.keySet()) {
  final String value = messages.get(key);
  // Use the value and do processing
}

更好的想法就是使用messages.entrySet ...

for (final Map.Entry<String, String> entry : messages.entrySet()) {
  final String key = entry.getKey();
  final String value = entry.getValue();
}

答案 3 :(得分:0)

还是很不清楚,但是你问过如何同时执行entrySet()和entryKey()。但是,entrySet()在一个数据结构中返回Key和Value:

for( Map.Entry<String,String> entry : messages.entrySet() ) {
    String key = entry.getKey();
    String value = entry.getValue();
    System.out.printf("%s = %s%n", key, value );
}

但通常你不会这样做,而只是简单地使用Key来获取Value,因此产生了一个更简单的迭代方法:

for( String key : messages.keySet() ) {
    String value = messages.get(key);

    System.out.printf("%s = %s%n", key, value );
}

没有设施可以仅使用默认Java中包含的工具来“查询”像MySQL这样的地图。像apache集合这样的库提供了Predicates和其他可以为您提供查询支持的过滤器。其他图书馆包括番石榴图书馆。例如,使用apache commons集合:

List<String> keys = new ArrayList<String>(messages.keySet());
CollectionUtils.filter( keys, new Predicate<String>() {
    public boolean evaluate( String key ) {
        if( someQueryLogic ) {
           return true;
        } else {
           return false;
        }
    }
} );

// now iterate over the keys you just filtered

for( String key : keys ) {
    String value = message.get(key);
    System.out.printf("%s = %s%n", key, value );
}