我目前正在从ArrayList<String>
Java 中的矩阵为 Excel 创建一个制表符分隔的表格。
矩阵是一个List<List<String>
,目前我正在添加"\t"
到矩阵中的每个字符串以及"\n"
每行的最后一个元素。我使用for
循环来做到这一点。
对于 1500 x 3000 矩阵,此过程需要大量时间(120 秒)。
为了减少时间,还有什么更好的方法来解决这个问题?
我目前正在从ArrayList<String>
Java 中的矩阵为 Excel 创建一个制表符分隔的表格。
矩阵是一个List<List<String>
,目前我正在添加"\t"
到矩阵中的每个字符串以及"\n"
每行的最后一个元素。我使用for
循环来做到这一点。
对于 1500 x 3000 矩阵,此过程需要大量时间(120 秒)。
为了减少时间,还有什么更好的方法来解决这个问题?
不确定您的矩阵是哪种方式,但我想可以构建这样的东西。在这里看不到任何明显的开销。
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();
}
StringBuilder
当您必须在循环中连接时,使用更好。
用于StringBuilder
形成 CSV 记录,然后用于BufferedWriter
将它们写入文件。使用BufferedWriter
会将内容保存在缓冲区中,并在缓冲区满后进行写入,从而避免连续访问硬盘进行写入。
发布您的代码,以便我们能够以更好的方式提供帮助。
如果没有您的代码,很难提出任何具体建议,但您希望避免生成要写入的完整字符串(以及所有相关的内存分配和垃圾收集),而只是遍历数组,发出字符串、制表符和换行符流到文件缓冲区。