我想打印一个数组列表向上数以千计的条目(它必须找到1到1000000之间的所有素数)。在节目的最后,我调用这个方法:打印一个ArrayList的最有效的方法
println(myArrayList);
虽然这个工作,只有几百项,它需要更多的时间来打印数组列表,而不是发现质数一旦有变得更加项。
迭代它会更高效吗?或者使用不同的课程?
我想打印一个数组列表向上数以千计的条目(它必须找到1到1000000之间的所有素数)。在节目的最后,我调用这个方法:打印一个ArrayList的最有效的方法
println(myArrayList);
虽然这个工作,只有几百项,它需要更多的时间来打印数组列表,而不是发现质数一旦有变得更加项。
迭代它会更高效吗?或者使用不同的课程?
它可能会更有效地迭代它。 println
只会做一个toString()
,这将产生很多String
和串联垃圾,你可以避免只是直接打印,而不是首先在内存中建立整个String
。
我试着对它进行迭代,并在每次迭代中打印,但是随后它开始向前移动,开始打印。最后,它比'println(myArrayList)'要长近3倍。也许它只是巨大的阵列使迭代成为一个问题... – BritKnight
我相信StringBuffer是一种更高效,更快捷的打印方式。只需在循环中创建一个,并在最后打印出来。
我尝试了你建议的StringBuffer方法,但它没有给出'println(myArrayList)'的任何显着优势;' (我一直在计算这个程序,只要它运行XD) – BritKnight
您是否打印到控制台?如果是这样,控制台操作比任何其他输出操作(文件,套接字等)都要慢很多。速度上的这种差异明显体现在您印刷的线条越多。
如果您需要打印到控制台,但是打印到文件的速度会更快,那么您可以做的“加速”功能不多。改变你的程序,使它打印到一个文件,你会注意到速度的提高。
我正在使用acm ConsoleProgram类。我不确定这与速度有何关系。 – BritKnight
好的问题是我正在使用ACM ConsoleProgram类(老师希望我们学习库),它的打印速度比标准控制台慢得多。一旦我切换到控制台,对于您所建议的所有方式而言,速度要快得多。 – BritKnight
你应该接受你的答案或提供意见。 – auselen