1

我目前正在从ArrayList<String>Java 中的矩阵为 Excel 创建一个制表符分隔的表格。

矩阵是一个List<List<String>,目前我正在添加"\t"到矩阵中的每个字符串以及"\n"每行的最后一个元素。我使用for循环来做到这一点。

对于 1500 x 3000 矩阵,此过程需要大量时间(120 秒)。

为了减少时间,还有什么更好的方法来解决这个问题?

4

4 回答 4

5

不确定您的矩阵是哪种方式,但我想可以构建这样的东西。在这里看不到任何明显的开销。

private final List<List<String>> matrix;
private final String SEPARATOR = "\t";
private final String END_OF_LINE = "\n";

public TSVFormatter(List<List<String>> matrix) {
    this.matrix = matrix;
}

public String doParse() {
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < matrix.size(); i++) {
        for (int o = 0; o < matrix.get(i).size(); o++) {
            sb.append(matrix.get(i).get(o));
            if (o <( matrix.get(i).size()-1))
                sb.append(SEPARATOR);
            else
                sb.append(END_OF_LINE);
        }
    }
    return sb.toString();
}
于 2013-09-18T21:39:14.957 回答
1

StringBuilder当您必须在循环中连接时,使用更好。

于 2013-09-18T21:15:32.380 回答
1

用于StringBuilder形成 CSV 记录,然后用于BufferedWriter将它们写入文件。使用BufferedWriter会将内容保存在缓冲区中,并在缓冲区满后进行写入,从而避免连续访问硬盘进行写入。

发布您的代码,以便我们能够以更好的方式提供帮助。

于 2013-09-18T21:21:53.013 回答
0

如果没有您的代码,很难提出任何具体建议,但您希望避免生成要写入的完整字符串(以及所有相关的内存分配和垃圾收集),而只是遍历数组,发出字符串、制表符和换行符流到文件缓冲区。

于 2013-09-18T21:23:37.853 回答