我正在阅读一个用一些分隔符分隔的文本文件。
我的文本文件内容示例
Avc def efg jksjd
1 2 3 5
3 4 6 0
逐行并使用哈希图将其保存在内存中,其中行号作为整数类型的键,文本文件的每一行作为 List 对象
考虑一下,我的地图会存储这样的信息
整数列表
1 [Avc def efg jksjd]
我正在使用 Apache POI 写入 excel。使用 Apache POI 写入 excel 时,我遵循这种方法,这是我的代码片段
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet("Sample sheet");
Map<Integer, List<Object>> excelDataHolder = new LinkedHashMap<Integer, List<Object>>();
int rownum = 0;
for (Integer key : keyset) {
Row row = sheet.createRow(rownum++);
List<Object> objList = excelHolder.get(key);//excelHolder is my map
int cellnum = 0;
for (Object obj : objList) {
Cell cell = row.createCell(cellnum++);
cell.setCellValue((Date) obj);
}
}
如果要写入 excel 的行数/记录数较少,这将非常有效。想象一下,如果记录以十亿为单位,或者如果文本文件有更多行假设为 100 000。我认为,我的方法失败了,因为 createRow 和 createCell 在堆中创建了超过 100 000 个对象。无论 java 到 excel api,我认为写入它(excel)是基于相同的方法,即,如上所示的集合迭代。我也用 aspose 做了一些例子,结果 aspose 我猜也有同样的问题。
- createRow 和 createCell 是否在每次调用时都会创建新对象?
- 如果是,有什么替代方案?如何以更好的性能编写大数据以实现 Excel?