用于保存已解析CSV文件内容的数据结构

我试图找出用Java解析csv文件的最佳方法。 现在每行都有X量的信息。 例如,第一行最多可以有5个字符串单词(用逗号分隔它们),而接下来的几行可能有3或6个或更多。

我的问题不是从文件中读取字符串 。 只是要清楚。 我的问题是什么数据结构最好保持每一行以及该行中的每个单词?

起初我考虑使用2D数组,但问题是数组大小必须是静态的(第二个索引大小将保存每行中有多少个单词,这可能与行到行不同)。

这是CSV文件的前几行:

0,MONEY 1,SELLING 2,DESIGNING 3,MAKING DIRECTOR,3DENT95VGY,EBAD,SAGHAR,MALE,05/31/2011,null,0,10000,07/24/2011 3KEET95TGY,05/31/2011,04/17/2012,120050 3LERT9RVGY,04/17/2012,03/05/2013,132500 3MEFT95VGY,03/05/2013,null,145205 DIRECTOR,XKQ84P6CDW,AGHA,ZAIN,FEMALE,06/06/2011,null,1,1000,01/25/2012 XK4P6CDW,06/06/2011,09/28/2012,105000 XKQ8P6CW,09/28/2012,null,130900 DIRECTOR,YGUSBQK377,AYOUB,GRAMPS,FEMALE,10/02/2001,12/17/2007,2,12000,01/15/2002 

您可以使用Map> 。 键是csv文件中的行号,List是每行中的单词。

另外一点:您可能会经常使用List#get(int)方法。 如果是这种情况,请勿使用链接列表。 这是因为链表的get(int)是O(n)。 我认为ArrayList是你最好的选择。

编辑 (基于AlexWien的观察):

在这种特殊情况下,由于键是行号,因此产生一组连续的整数,更好的数据结构可能是ArrayList> 。 这将导致更快的密钥检索。

使用数组列表 。 它们是具有动态大小的数组。

最好的方法是使用CSV解析器,如http://opencsv.sourceforge.net/ 。 此解析器使用List of String []来保存数据。

使用List() ,它可以动态扩展。

如果要包含2个维,请使用List>()

这是一个例子:

 List> data = new ArrayList>(); List temp = Arrays.asList(someString.split(",")); data.add(temp); 

把它放在某种循环中并得到你的数据。