0

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

public HashMap<String, String> messages;

但!我不想循环所有键,只是一些。就像搜索 MySQL 数据库一样。

对不起我的英语,我是挪威人。

4

4 回答 4

2

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

另外,我强烈建议您查看Collections 上的教程路径。您还应该熟悉Java API 文档。特别是,您需要查看HashMapMap的文档。

于 2012-08-18T19:48:24.033 回答
0

equals hashcode在您的类中正确实施Block并调用get(Object key)方法Hashmap,它将进行搜索。

于 2012-08-18T19:45:50.443 回答
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();
}
于 2012-08-18T19:53:09.443 回答
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 集合这样的库提供了谓词和其他过滤器,可以为您提供查询支持。其他库包括番石榴库。例如使用 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 );
}
于 2012-08-18T19:58:37.743 回答