Unk*_*ser 102 java collections
我有一个HashMap:
private HashMap<TypeKey, TypeValue> example = new HashMap<TypeKey, TypeValue>();
Run Code Online (Sandbox Code Playgroud)
现在我想要浏览所有值并打印它们.
我写了这个:
for (TypeValue name : this.example.keySet()) {
System.out.println(name);
}
Run Code Online (Sandbox Code Playgroud)
它似乎不起作用.
问题是什么?
编辑:另一个问题:这个集合是零基础吗?我的意思是如果它有1个键,值大小是0还是1?
Ken*_*han 109
keySet()只返回hashmap中的一组键,你应该迭代这个键集,并使用这些键从hashmap中获取值.
在您的示例中,hashmap的键的类型是TypeKey
,但是您TypeValue
在通用for循环中指定,因此无法编译.您应该将其更改为:
for (TypeKey name: example.keySet()){
String key = name.toString();
String value = example.get(name).toString();
System.out.println(key + " " + value);
}
Run Code Online (Sandbox Code Playgroud)
如果您不需要打印键值并且只需要hashmap值,则可以使用其他人的建议.
另一个问题:这个集合是零基础吗?我的意思是如果它有1个键和值,它的大小是0还是1?
从中返回的集合keySet()
是一个Set.您无法使用索引从Set中获取值,因此它不是从零开始还是从一开始的问题.如果您的hashmap有一个键,则返回的keySet()将在其中包含一个条目,其大小将为1.
Min*_*fei 84
查看键值对的简单方法:
Map<String, Integer> map = new HashMap<>();
map.put("a", 1);
map.put("b", 2);
System.out.println(Arrays.asList(map)); // method 1
System.out.println(Collections.singletonList(map)); // method 2
Run Code Online (Sandbox Code Playgroud)
方法1和方法2都输出:
[{b=2, a=1}]
Run Code Online (Sandbox Code Playgroud)
use*_*001 37
假设你有Map<KeyType, ValueType>
,你可以像这样打印:
for (Map.Entry<KeyType, ValueType> entry : map.entrySet()) {
System.out.println(entry.getKey()+" : "+entry.getValue());
}
Run Code Online (Sandbox Code Playgroud)
Ven*_*esh 15
要打印键和值,请使用以下命令:
for (Object objectName : example.keySet()) {
System.out.println(objectName);
System.out.println(example.get(objectName));
}
Run Code Online (Sandbox Code Playgroud)
您想要设置值,而不是键集:
for (TypeValue name: this.example.values()) {
System.out.println(name);
}
Run Code Online (Sandbox Code Playgroud)
您提供的代码甚至无法编译,在未来的问题中可能值得一提 - "似乎不起作用"有点模糊!
值得一提的是Java 8方法,使用BiConsumer
和lambda函数:
BiConsumer<TypeKey, TypeValue> consumer = (o1, o2) ->
System.out.println(o1 + ", " + o2);
example.forEach(consumer);
Run Code Online (Sandbox Code Playgroud)
假设您已toString
根据需要覆盖了两种类型的方法.
map.forEach((key, value) -> System.out.println(key + " " + value));
Run Code Online (Sandbox Code Playgroud)
使用 java 8 特性
Java 8 新特性forEach
风格
import java.util.HashMap;
public class PrintMap {
public static void main(String[] args) {
HashMap<String, Integer> example = new HashMap<>();
example.put("a", 1);
example.put("b", 2);
example.put("c", 3);
example.put("d", 5);
example.forEach((key, value) -> System.out.println(key + " : " + value));
// Output:
// a : 1
// b : 2
// c : 3
// d : 5
}
}
Run Code Online (Sandbox Code Playgroud)
一个简单的带有变量名称的打印语句,其中包含哈希映射的引用:
HashMap<K,V> HM = new HashMap<>(); //empty
System.out.println(HM); //prints key value pairs enclosed in {}
Run Code Online (Sandbox Code Playgroud)
之所以toString()
可行,是因为该方法已经被覆盖,该方法已
被文档中AbstractMap class
的HashMap Class
更多信息扩展
返回此映射的字符串表示形式。字符串表示形式由键值映射列表组成,这些键值映射由映射的entrySet视图的迭代器返回,并用大括号(“ {}”)括起来。相邻的映射用字符“,”(逗号和空格)分隔。每个键值映射均表示为键,后跟等号(“ =”),后跟关联值。键和值通过String.valueOf(Object)转换为字符串。
用于快速打印 HashMap 中的条目
System.out.println(Arrays.toString(map.entrySet().toArray()));
Run Code Online (Sandbox Code Playgroud)