2012-10-24 24 views
2

我想打印一个数组列表向上数以千计的条目(它必须找到1到1000000之间的所有素数)。在节目的最后,我调用这个方法:打印一个ArrayList的最有效的方法

println(myArrayList); 

虽然这个工作,只有几百项,它需要更多的时间来打印数组列表,而不是发现质数一旦有变得更加项。

迭代它会更高效吗?或者使用不同的课程?

+0

好的问题是我正在使用ACM ConsoleProgram类(老师希望我们学习库),它的打印速度比标准控制台慢得多。一旦我切换到控制台,对于您所建议的所有方式而言,速度要快得多。 – BritKnight

+0

你应该接受你的答案或提供意见。 – auselen

回答

0

它可能会更有效地迭代它。 println只会做一个toString(),这将产生很多String和串联垃圾,你可以避免只是直接打印,而不是首先在内存中建立整个String

+0

我试着对它进行迭代,并在每次迭代中打印,但是随后它开始向前移动,开始打印。最后,它比'println(myArrayList)'要长近3倍。也许它只是巨大的阵列使迭代成为一个问题... – BritKnight

0

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

+0

我尝试了你建议的StringBuffer方法,但它没有给出'println(myArrayList)'的任何显着优势;' (我一直在计算这个程序,只要它运行XD) – BritKnight

0

您是否打印到控制台?如果是这样,控制台操作比任何其他输出操作(文件,套接字等)都要慢很多。速度上的这种差异明显体现在您印刷的线条越多。

如果您需要打印到控制台,但是打印到文件的速度会更快,那么您可以做的“加速”功能不多。改变你的程序,使它打印到一个文件,你会注意到速度的提高。

+0

我正在使用acm ConsoleProgram类。我不确定这与速度有何关系。 – BritKnight