在Java中打印HashMap

我有一个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中的一组键,你应该迭代这个键集,并使用这些键从hashmap中获取值。

在你的例子中,hashmap的键types是TypeKey ,但是你在generics的for循环中指定了TypeValue ,所以它不能被编译。 您应该将其更改为:

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

如果你不需要打印键值,只需要hashmap值,就可以使用别人的build议。

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

keySet()返回的集合是一个集合 。您不能使用索引从Set中获取值,所以它不是基于零或基于一个的问题。 如果你的散列表有一个键,返回的keySet()将在里面有一个条目,它的大小是1。

查看键值对的简单方法:

 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}] 

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

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

你有几个select

  • 获取map.values() ,获取值,而不是键
  • 获取map.entrySet()同时具有
  • 获取keySet()和每个按键调用map.get(key)

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

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

你需要设置的值,而不是键集:

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

你所提供的代码甚至不会编译,这在以后的问题中可能值得一提 – “似乎不起作用”有点含糊!

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

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

假设您已经重写了两种types的toString方法(如果需要的话)。

我做了使用string映射(如果你正在使用string映射)。

 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()); } 

Java 8新functionforEach风格

 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 } } 

如果映射将一个集合保存为值,则其他答案需要额外的努力将它们转换为string,如Arrays.deepToString(value.toArray()) (如果它是一个列表值的映射)等

我经常遇到这些问题,遇到了使用ObjectMappers打印所有对象的generics函数。 这在所有的地方都非常方便,特别是在做实验的时候,我build议你select这种方式。

 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; } 

您可以使用Entry类轻松读取HashMap

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

一个简单的带有variables名的打印语句包含了Hash Map的引用:

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

这是toString()因为toString()方法已经在由HashMap Class扩展的AbstractMap class覆盖了更多信息

返回此映射的string表示forms。 string表示由按照地图的entrySet视图的迭代器返回的顺序组成的键 – 值映射列表组成,并用大括号(“{}”)括起来。 相邻的映射由字符“,”(逗号和空格)分隔。 每个键 – 值映射都呈现为键后跟一个等号(“=”),后跟相关联的值。 键和值通过String.valueOf(Object)转换为string。