我的Java8程序有几个阶段:
解析CSV file
。 CSV file
看起来像这样:
123,[Foo:true; Bar:true; Foobar:false; Barfoo:false]
456,[Foobar:true; Barfoo:false; Foo:false; Bar:false]
789,[Foobar:true; Barfoo:false; Foo:false]
其中 123 , 546 和 789 是每个数据结构的唯一标识符,一个数据结构由列标识符 Foo
Bar
Foobar
和Barfoo
,其中每个布尔值表示,如果列是 key-colum 。
解析CSV file
时,每行必须创建一个数据结构。
后来,在运行时,需要快速,以下情况会发生:
提供了包含列数据的ArrayList<String>
。需要将数据添加到特定数据结构中。 (我现在做唯一标识符123)。
说:ArrayList<String>
需要添加到 123 :1-&gt; foo
,2-&gt; bar
,3-&gt; foobar
,4 - &gt; barfoo
。
说:另一个ArrayList<String>
需要添加到 456 :1-&gt; foobar
,2-&gt; barfoo
说:另一个ArrayList<String>
需要添加到 789 :1-&gt; foobar
,2-&gt; null
,3-&gt; foo
数据结构需要提供的任务如下:
ArrayList<String>
):void ArrayList<String>
):boolean(如果成功)Arraylist<String>
):boolean ArrayList<String>
):ArrayList<String>
备注:
一个数据结构 123 内的所有键组合都是唯一的。含义:如果在 123 中的一个条目包含foo
,bar
,foobar
,barfoo
,则另一个条目foo
,{ {1}},bar
,doesnt matter
将不被允许。允许使用neither
,foo1
,bar
,foobar
的其他enrty,以及barfoo
,foo1
,{{1 }},bar1
也是允许的。
它不会发生,解析,列名不是一个键(true),在键前面。这不会发生:
foobar
在运行时,标记为barfoo
的列将无法获取数据:这不会发生:[Foobar:true;Barfoo:false;Foo:true;Bar:false]
已添加到 123 ,数据如下所示:1-&gt; key
,2-&gt; ArrayList<String>
,3-&gt; foo
。
我试过:存储每个datastructure-class两个数组。一个具有列名称,另一个具有列的数字,这些是键。在运行时,将处理键指示数组以获取所有键值(在它上面的第一个添加示例将是null
和foobar
)并且它们将被连接。 (到一个字符串foo
)。这是第二个bar
的新密钥,其中值("foo,bar"
)包含所有列的数据(HashMap<String,ArrayList<String>>
,ArrayList<String>
,foo
,{{ 1}})。
我有一个bar
方法:
foobar
和addDataListEnty看起来非常相似:
barfoo
这确实有效,但实际上很慢,因为需要在每个数据结构访问时创建密钥(getKeyString
)。
HashMaps,Lists,Sets(甚至谷歌番石榴)的哪种组合最好尽可能快地制作它?