在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。