【问题标题】:Most efficient way to print an ArrayList打印 ArrayList 的最有效方法
【发布时间】:2012-10-14 21:43:43
【问题描述】:

我正在尝试打印一个包含数千个条目的 ArrayList(它必须找到 1 到 1000000 之间的所有素数)。在程序的最后,我调用了这个方法:

println(myArrayList);

虽然这仅适用于几百个条目,但一旦有更多条目,打印数组列表要比查找素数花费更多的时间。

迭代它会更有效吗?还是使用不同的类?

【问题讨论】:

  • 好的,问题是我使用的是 ACM ConsoleProgram 类(老师希望我们学习这个库),它的打印速度比标准控制台慢得多。一旦我切换到控制台,它就会快得多,对于你建议的所有方式。
  • 您应该接受您的答案或提供 cmets。

标签: java performance arraylist primes


【解决方案1】:

您要打印到控制台吗?如果是这样,控制台操作比任何其他输出操作(文件、套接字等)都要慢得多。打印的行数越多,这种速度差异就越明显。

如果您需要打印到控制台,那么“加速”您无能为力,但打印到文件会快得多。更改您的程序,使其打印到文件中,您会发现速度有所提高。

【讨论】:

  • 我正在使用 acm ConsoleProgram 类。我不确定这与速度有何关系。
【解决方案2】:

我相信 StringBuffer 是一种更高效、更快捷的打印方式。只需在循环中构建一个并在最后打印它。

【讨论】:

  • 我尝试了您建议的 StringBuffer 方法,但与 'println(myArrayList);' 相比,它没有任何显着优势(我一直在计时这个程序,只要它运行 XD)
【解决方案3】:

迭代它可能会更有效。 println 只会执行 toString(),这将产生大量 String 和串联垃圾,您可以通过直接打印而不是先在内存中构建整个 String 来避免这些垃圾。

【讨论】:

  • 我试图迭代它,并在每次迭代时打印,但随后它开始断断续续地移动,断断续续地打印。最后,它比'println(myArrayList);'花费了近3倍的时间。也许它只是数组的巨大尺寸使迭代成为一个问题......
猜你喜欢
  • 1970-01-01
  • 2016-06-26
  • 2019-10-05
  • 1970-01-01
  • 2021-08-02
  • 2016-10-18
  • 1970-01-01
  • 2011-09-05
相关资源
最近更新 更多