for (int i = 0 ; i < row ; i++){
for (int k = 0 ; k < col ; k++) {
System.out.print("\t" + mat[i][k]);
}
我的目标是减少大量行和列的执行时间
答案 0 :(得分:3)
我没想到这一点,但是艾略特的评论是正确的。巴希尔,你问一个例子,这里是:
public class Main
{
private static void test()
{
int row = 1000;
int col = 1000;
int mat[][] = new int[row][col];
StringBuilder buffer=new StringBuilder();
for (int i = 0; i < row; i++)
{
for (int k = 0; k < col; k++)
{
//System.out.print("\t" + mat[i][k]);
//System.out.print('\t');
//System.out.print(mat[i][k]);
buffer.append('\t');
buffer.append(mat[i][k]);
}
}
System.out.println(buffer.toString());
}
public static void main(String[] args)
{
long start = System.currentTimeMillis();
test();
long end = System.currentTimeMillis();
System.err.println("Test took " + (end - start) + "ms");
}
}
我在Linux上(在Linux上)执行了它,以确保终端窗口或图形卡的性能不会影响测量:
java Main > /dev/null
缓冲版本的运行速度比原始版本快30倍。
答案 1 :(得分:1)
每个System.out.println
都需要时间来执行。当前,在您的代码中,您正在对每个元素进行System.out.println
我们可以通过对每一行而不是对每一列进行System.out.println
来将其减少到几乎四分之一
注意:
如果您事先知道代码中有多少行和多少列,则可以进行进一步的优化。如果行和列的基数存在重大差异,则可以使用较低的基数值运行外循环。
您可以看到以下提到的代码:
StringBuilder sb=new StringBuilder();
for(int i=0; i<row; i++)
{
for(int j=0; j<col; j++)
{
sb.append('\t');
sb.append(mat[i][j]);
}
sb.append('\n');
}
System.out.println(sb.toString());
答案 2 :(得分:0)
如果仅打算打印二维数组,则可以使用Arrays.deepToString
。但是,您打算以上述格式打印它,但仍然希望减少I / O操作,可以使用StringBuilder
生成一个字符串并进行打印。请注意,这两个选项都会占用您的内存。第一个选项内部使用StringBuilder
,而第二个选项中,您将使用StringBuilder
自己构建字符串。因此,这是I / O操作数与内存利用率的对比。
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[][] mat = { { 10, 20 }, { 40, 30 } };
System.out.println(Arrays.deepToString(mat));
StringBuilder sb = new StringBuilder();
for (int i = 0; i < mat.length; i++) {
for (int k = 0; k < mat[0].length; k++) {
sb.append("\t" + mat[i][k]);
}
sb.append("\n");
}
System.out.println(sb);
}
}
输出:
[[10, 20], [40, 30]]
10 20
40 30