Java方法“ Arrays.deepToString()”是打印2D数组的最有效方法吗?

时间:2019-02-28 15:07:03

标签: java c# arrays

我发现了类似的问题,

  

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#库?我似乎找不到任何人甚至在任何地方问一个人。

1 个答案:

答案 0 :(得分:3)

您从错误的角度看待这个问题:

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

最放心:与在内存中处理几乎没有的数组相比,以这种方式打印到标准输出的成本要很多倍(有关某些示例数据,请参见here)。

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

相反,请花费时间来编写易于阅读,理解和维护的代码。从那里开始,对Arrays.deepToString(arrayName); single 调用比编写类似的自定义循环要好得多。

请紧记:在Java世界中,运行时性能并非来自编写“灵巧”的源代码。它来自于JIT,它决定“此代码经常使用,我应该将其转换为机器代码”。如果JIT认为“不值得优化”,则不值得优化。如果值得优化,则使JIT易于实现。通过编写简单的代码。

长话短说:实现功能是一个不错的练习,但是既然您已经实现了,就把它扔掉,然后使用适合您的库调用即可。