在Java中打印HashMap

时间:2011-05-07 09:09:17

标签: java collections

我有一个HashMap:

private HashMap<TypeKey,TypeValue > example= new HashMap<TypeKey, TypeValue>();

现在我想要浏览所有值并打印它们。

我写了这个:

for (TypeValue name: this.example.keySet()){

        System.out.println(name);
} 

它似乎不起作用。

有什么问题?

编辑: 另一个问题:这个集合是否基于零?我的意思是,如果它有1个键,值大小为0或1?

15 个答案:

答案 0 :(得分:94)

keySet()只返回hashmap中的一组键,你应该迭代这个键集,并使用这些键从hashmap中获取值。

在您的示例中,hashmap键的类型为TypeKey,但您在通用for循环中指定了TypeValue,因此无法编译。你应该把它改成:

for (TypeKey name: example.keySet()){
            String key = name.toString();
            String value = example.get(name).toString();  
            System.out.println(key + " " + value);  
} 

如果您不需要打印键值并且只需要hashmap值,则可以使用其他人的建议。

  

另一个问题:这个集合   零基数?我的意思是它有一把钥匙   和值的大小是0还是1?

keySet()返回的集合是Set。您无法使用索引从集合中获取值,因此不是从零开始还是从一开始的问题。如果您的hashmap有一个键,则返回的keySet()将在其中包含一个条目,其大小将为1.

答案 1 :(得分:71)

查看键值对的简单方法:

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

方法1和方法2都输出:

[{b=2, a=1}]

答案 2 :(得分:36)

假设你有Map<KeyType, ValueType>,你可以这样打印:

for (Map.Entry<KeyType, ValueType> entry : map.entrySet()) {
    System.out.println(entry.getKey()+" : "+entry.getValue());
}

答案 3 :(得分:13)

你有几个选择

答案 4 :(得分:13)

要打印键和值,请使用以下命令:

for (Object objectName : example.keySet()) {
   System.out.println(objectName);
   System.out.println(example.get(objectName));
 }

答案 5 :(得分:9)

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

for (TypeValue name: this.example.values()) {
        System.out.println(name);
}

你提供的代码甚至不会编译,这在将来的问题中值得一提 - “似乎不起作用”有点模糊!

答案 6 :(得分:7)

值得一提的是Java 8方法,使用BiConsumer和lambda函数:

BiConsumer<TypeKey, TypeValue> consumer = (o1, o2) -> 
           System.out.println(o1 + ", " + o2);

example.forEach(consumer);

假设您已根据需要覆盖了这两种类型的toString方法。

答案 7 :(得分:4)

我是使用String map完成的(如果你正在使用String Map)。

for (Object obj : dados.entrySet()) {
    Map.Entry<String, String> entry = (Map.Entry) obj;
    System.out.print("Key: " + entry.getKey());
    System.out.println(", Value: " + entry.getValue());
}

答案 8 :(得分:3)

带有变量名的简单print语句包含哈希映射的引用:

HashMap<K,V> HM = new HashMap<>(); //empty
System.out.println(HM); //prints key value pairs enclosed in {}

这是有效的,因为toString()方法已经被AbstractMap class覆盖,HashMap ClassHTTPClient扩展 来自文档的更多信息

  

返回此地图的字符串表示形式。字符串表示由地图的entrySet视图的迭代器返回的顺序中的键 - 值映射列表组成,括在大括号(“{}”)中。相邻的映射由字符“,”(逗号和空格)分隔。每个键值映射都呈现为键,后跟等号(“=”),后跟相关值。通过String.valueOf(Object)将键和值转换为字符串。

答案 9 :(得分:2)

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

    }
}

答案 10 :(得分:2)

对于我来说,这一行很有效:

Arrays.toString(map.entrySet().toArray())

答案 11 :(得分:1)

如果地图将集合作为值保存,则其他答案需要额外的努力才能将它们转换为字符串,例如Arrays.deepToString(value.toArray())(如果是列表值的映射)等。

我经常遇到这些问题,并遇到了使用ObjectMappers打印所有对象的通用函数。这在所有地方都非常方便,特别是在试验过程中,我建议你选择这种方式。

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;

public static String convertObjectAsString(Object object) {
    String s = "";
    ObjectMapper om = new ObjectMapper();
    try {
        om.enable(SerializationFeature.INDENT_OUTPUT);
        s = om.writeValueAsString(object);
    } catch (Exception e) {
        log.error("error converting object to string - " + e);
    }
    return s;
}

答案 12 :(得分:0)

您可以使用Entry课程轻松阅读HashMap

for(Map.Entry<TypeKey, TypeKey> temp : example.entrySet()){
    System.out.println(temp.getValue()); // Or something as per temp defination. can be used
}

答案 13 :(得分:0)

用于快速打印HashMap中的条目

System.out.println(Arrays.toString(map.entrySet().toArray()));

答案 14 :(得分:0)

map.forEach((key, value) -> System.out.println(key + " " + value));

使用Java 8功能