在Java中打印HashMap

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.

  • 或者更好的是:`for(Map.Entry <String,String> entry:map.entrySet()){...}` (17认同)
  • 或者更紧凑:`example.forEach((key, value) -&gt; System.out.println("key + " | " + value));` (4认同)

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)

  • 就像:```System.out.println(map);```,输出:````{b = 2,a = 1}``` (16认同)

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)


Boz*_*zho 13

你有几个选择


dav*_*mac 9

您想要设置值,而不是键集:

for (TypeValue name: this.example.values()) {
        System.out.println(name);
}
Run Code Online (Sandbox Code Playgroud)

您提供的代码甚至无法编译,在未来的问题中可能值得一提 - "似乎不起作用"有点模糊!


Mar*_*oun 8

值得一提的是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根据需要覆盖了两种类型的方法.


Th0*_*gal 7

map.forEach((key, value) -> System.out.println(key + " " + value));
Run Code Online (Sandbox Code Playgroud)

使用 java 8 特性

  • 虽然此代码可能会解决问题,但 [包括解释](https://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) 如何以及为何解决问题将真正有助于提高您帖子的质量,并可能导致更多的投票。请记住,您是在为未来的读者回答问题,而不仅仅是现在问的人。请[编辑]您的答案以添加解释,并说明适用的限制和假设。 (3认同)

ahm*_*met 6

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)


arj*_*ani 6

一个简单的带有变量名称的打印语句,其中包含哈希映射的引用:

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 classHashMap Class更多信息扩展

返回此映射的字符串表示形式。字符串表示形式由键值映射列表组成,这些键值映射由映射的entrySet视图的迭代器返回,并用大括号(“ {}”)括起来。相邻的映射用字符“,”(逗号和空格)分隔。每个键值映射均表示为键,后跟等号(“ =”),后跟关联值。键和值通过String.valueOf(Object)转换为字符串。

  • 这似乎是上述方法的最佳答案。 (2认同)

Kay*_*ayV 5

对我来说,这条简单的线很有效:

Arrays.toString(map.entrySet().toArray())
Run Code Online (Sandbox Code Playgroud)


ThR*_*olD 5

用于快速打印 HashMap 中的条目

System.out.println(Arrays.toString(map.entrySet().toArray()));
Run Code Online (Sandbox Code Playgroud)