我正在使用Java读取具有任意数量的列和行的Excel文件。前两列不相关,但以下列(成对的两列)引用数据实体属性。每个实体彼此相关,因此,例如,我可以参考Cell E1并从Cell M1获取数据。
我应该在这种情况下使用哪种数据结构?顺便说一下,我正在使用Apache POI从Excel文件中读取。
非常感谢!
答案 0 :(得分:0)
如果您有标题行且标题是唯一的,请将每行存储为Map,其中键是标题,值是单元格文本。这会为您的数据添加上下文,并使您的行数据结构有意义且能够使用,而不会将行数据结构(此时可能是List)的列号到标题名称的映射传递给其他使用者。但这确实是以速度和记忆为代价的。
根据您对数据的解释方式,当单元格为空/空白时,您可以在地图中包含或排除条目。然后,您将使用List来组织所有这些行。
如果您的数据结构需要知道单元格地址(或数字行和列),但您不能只传递一个XSSFSheet对象(要么隐藏您从应用程序的其余部分使用POI的事实)或者由于内存不能保持XLSX文件处于打开状态),使用List或Map来组织行。如果有一堆空白行,您不希望在列表中保存一堆空值以保持列表索引和行号一致,那么Map会更好。行数据结构可以是List,其中索引是单元格的列号,如果列稀疏,则为Map。
如果要将标题和单元格文本捆绑在一起,可以使用的另一种方法是使用一种元组或对(例如org.apache.commons.lang3.tuple.Pair)。这些可以填入List或Map。
您肯定要考虑此数据结构的消费者是什么以及如何优化结构以最小化搜索数据结构以提取相关性。
也许一个普通的String[][]
会起作用......
你看过java.sql.ResultSet了吗?听起来您的数据遵循关系数据库表结构。
如果您有一个上限或固定数量的列,我会建议使用元组或一个命名元组来存储您的行内容,但听起来您的数据比其更自由。