我有一个HashMap
。
private HashMap<TypeKey, TypeValue> example = new HashMap<TypeKey, TypeValue>();
现在我想运行所有的值并打印它们。
我这样写道。
for (TypeValue name : this.example.keySet()) {
System.out.println(name);
}
它似乎不起作用。
问题出在哪里?
编辑。 另一个问题。这个集合是基于零的吗?我的意思是,如果它有1个键和值,其大小是0还是1?
keySet()只从你的哈希姆中返回一组键,你应该遍历这个键集,并使用这些键从哈希姆中获取值。
在你的例子中,hashmap的键的类型是TypeKey
,但你在通用for-loop中指定了TypeValue
,所以它不能被编译。你应该把它改成:
for (TypeKey name: example.keySet()){
String key = name.toString();
String value = example.get(name).toString();
System.out.println(key + " " + value);
}
针对Java8的更新:
example.entrySet().forEach(entry->{
System.out.println(entry.getKey() + " " + entry.getValue());
});
如果你不需要打印键值,只需要hashmap值,你可以使用其他人的建议。
另一个问题。这个集合是 是零基的吗?我是说如果它有一个键 和值,它的大小是0还是1?
从keySet()
返回的集合是一个Set.你不能用索引从一个Set中获取值,所以这不是一个零基或一基的问题。如果你的hashmap有一个键,返回的keySet()里面会有一个条目,其大小为1。
你有几个选择
map.values()
](http://download.oracle.com/javase/6/docs/api/java/util/Map.html#values()),它得到的是值,而不是键map.entrySet()
](http://download.oracle.com/javase/6/docs/api/java/util/Map.html#entrySet()),它有两个值。keySet()
](http://download.oracle.com/javase/6/docs/api/java/util/Map.html#keySet())并为每个键调用[`map.get(key)`](http://download.oracle.com/javase/6/docs/api/java/util/Map.html#get(java.lang.Object))