【问题标题】:Vertically print a hashmap垂直打印哈希图
【发布时间】:2016-01-10 05:26:30
【问题描述】:

我是 Java 的新手,现在感觉很空白。

我正在制作一个使用 Apachi POI 从 excel 文档中获取数据并打印结果的程序。

我创建了一个哈希图,它使用一个“for”循环来遍历 Excel 工作表,并将值存储在其中。

Map<String, Integer> dataMap = new HashMap<String, Integer>();

循环运行完成后,我运行以下代码来打印结果:

System.out.println(dataMap);

结果以这种格式打印出来:

{A=1, Q=15, R=35, D=98, X=60, Y=21, N=57}

有没有一种方法可以打印出我的 hashmap,使它看起来更有条理,就像一个列表?有点像这样:

A = 1
Q = 15
R = 35
D = 98
X = 60
Y = 21
N = 57

我找不到这个问题的解决方案。如果有人可以请逐步告诉我如何按照我想要的方式打印此代码,那将是很棒的。

【问题讨论】:

标签: java hashmap pretty-print


【解决方案1】:
for (String key : dataMap.keySet()) {
    System.out.println(key + " = " + dataMap.get(key));
}

【讨论】:

  • 使用entrySet() 进行迭代可能会更好,以防止所有get() 调用的开销。
  • 哇,Rahin,您的代码完美无瑕。但是@Andreas,您能更深入地了解为什么我应该使用 entrySet() 吗?如果我使用 Rahin 的代码会遇到哪些潜在问题?
  • 您不会在正确性方面遇到问题(即您将始终获得正确的输出)。但是,get() 调用可能会很昂贵。通常,获取需要 O(1) 时间,但在绝对最坏的情况下可能需要 O(n)。通过使用使用 entrySet() 的解决方案,您不再在地图上调用 .get(key),并可能避免特定 get 操作的 O(n) 最坏情况。对于最佳实践,我同意,迭代 entrySet(),但您可能不会注意到性能方​​面的任何事情
  • @ihoaxed 没问题,但是使用entrySet(),就像 Dinil 的回答一样,在不进行地图查找的情况下检索值。虽然地图查找速度非常快,但不执行它们会更快。你可能不会注意到有什么不同,所以这是一个小问题。
  • 我明白了。感谢你们的伟大回应。这真的很有帮助。另外,@Rahin,“O(1)”和“O(n)”是什么意思?我正在自学 Java,对这一切都很陌生!
【解决方案2】:
    Iterator it = dataMap.entrySet().iterator();
    while (it.hasNext()) {
        Map.Entry pair = (Map.Entry) it.next();
        System.out.println(pair.getKey() + " = " + pair.getValue());
    }

【讨论】:

    【解决方案3】:
        for (Entry<String, Integer> entry : dataMap.entrySet()) {
            System.out.println(entry.getKey() + " = " + entry.getValue());
        } 
    

    如果要按插入顺序输出,请使用 LinkedHashMap。

    更新了 TreeMap 示例:

        Map<String, Integer> dataMap = new TreeMap<String, Integer>();
        dataMap.put("D", 4);
        dataMap.put("B", 2);
        dataMap.put("F", 6);
        dataMap.put("E", 5);
        dataMap.put("C", 3);
        dataMap.put("G", 7);
        dataMap.put("A", 1);
    
    
        for (Entry<String, Integer> entry : dataMap.entrySet()) {
            System.out.println(entry.getKey() + " = " +        entry.getValue());
        } 
    

    【讨论】:

    • 如果你想要按键排序的输出,使用TreeMap
    • @Andreas 只是好奇。即使我已经有了正确的代码。如何使用树状图来做到这一点?
    猜你喜欢
    • 2022-12-10
    • 1970-01-01
    • 1970-01-01
    • 2014-12-08
    • 2014-11-30
    • 1970-01-01
    • 1970-01-01
    • 2016-02-03
    • 2011-10-27
    相关资源
    最近更新 更多