【问题标题】:Is the Java method "Arrays.deepToString()" the most efficient way to print a 2D array?Java 方法“Arrays.deepToString()”是打印二维数组最有效的方法吗?
【发布时间】:2019-02-28 23:30:19
【问题描述】:

我发现了类似的问题:

Java - Best way to print 2D array?

但他们没有回答这个问题——效率更高吗?

我正在用 C# 编写一个基本的小型控制台游戏,它需要反复清除和写入控制台以刷新游戏状态。在寻找比我目前的尝试更有效的方法时,使用嵌套的 for 循环遍历数组并以这种方式打印,我在 Java 中发现了这一点:

Arrays.deepToString(arrayName);

这是我想要达到的目标。

  1. 这是否比在 Java 中像这样使用嵌套循环更有效?:

    String[][] map = new String[10][10];
    
    for (int i = 0; i < 10; i++)
    {
        for (int j = 0; j < 10; j++)
        {
            map[i][j] = "=";
        }
    }
    
    boolean firstRun = true;
    
    for (int i = 0; i < 10; i++)
    {
        for (int j = 0; j < 10; j++)
        {
            if (j == 0 && firstRun == false)
            {
                System.out.print("\n");
            }
    
            System.out.print(map[i][j]);
            firstRun = false;
        }
    }
    
  2. 如果效率更高,是否有等效的 C# 库?我似乎在任何地方都找不到,甚至找不到人询问。

【问题讨论】:

  • 您需要它有多高效,目前它的效率如何?不衡量就无法优化性能。使用分析器。
  • 不管我需要它有多高效,这些方法中的一种或另一种在理论上肯定更有效,不是吗?
  • 感谢快速解答,双赢哈哈

标签: java c# arrays


【解决方案1】:

你从错误的角度看这个:

  • 您的代码几乎不处理任何数据(10x10 在 2019 年没有
  • 您的代码正在执行控制台输出

请放心:像这样打印到标准输出的成本比处理内存中几乎为零的数组要贵很多倍(有关示例数据,请参阅here)。

因此,真正的答案是:您可以在这里安全地忽略性能方面。

不如把时间花在编写易于阅读、理解和维护的代码上。从那里开始,single 调用 Arrays.deepToString(arrayName); 比编写自定义循环更可取。

请记住:在 Java 世界中,运行时性能并非来自编写“聪明”的源代码。它来自于 JIT 决定“此代码经常使用,我应该将其翻译成机器代码”。如果 JIT 认为“不值得优化”,那么它不值得优化。如果值得优化,请让 JIT 轻松。通过编写简单易行的代码。

长话短说:实现该功能是一个很好的练习,但现在你已经实现了,把它扔掉并使用适合你的库调用。

【讨论】:

  • 虽然这不是我正在使用的代码,但我只是将其用作示例,这绝对回答了我的问题并有很大帮助,谢谢。
猜你喜欢
  • 1970-01-01
  • 2013-11-08
  • 2015-02-26
  • 1970-01-01
  • 1970-01-01
  • 2018-11-28
  • 2021-12-25
  • 1970-01-01
相关资源
最近更新 更多