我正在尝试使用Java高效加载大型CSV格式的文件(通常为200-600mb)(内存更少,访问速度更快).目前,该程序正在使用字符串数组列表.之前使用Lua程序处理此操作,该程序使用每个CSV行的表和用于保存每个"行"表的表.
以下是内存差异和加载时间的示例:
如果我没记错的话,Lua表中的重复项存在作为对实际值的引用.我怀疑在Java示例中,List正在保存每个重复值的单独副本,这可能与更大的内存使用量有关.
以下是CSV文件中数据的一些背景知识:
以下是加载数据可能需要的一些示例:
我的问题 - 是否有一个集合需要更少的内存来保存数据但仍然提供了轻松快速地搜索/排序数据的功能?
为了优化您的内存问题,我建议使用享元模式,特别是对于具有大量重复项的字段。
如果您为您的类提供了良好的实现LineItem(implementequals和Comparable),您可以大量优化内存使用hashcode。