实现反向MultiMap的最佳方式

时间:2015-07-09 19:41:25

标签: java string arraylist data-structures

我的Java8程序有几个阶段:

解析CSV fileCSV 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 FoobarBarfoo,其中每个布尔值表示,如果列是 key-colum

解析CSV file时,每行必须创建一个数据结构。

后来,在运行时,需要快速,以下情况会发生:

提供了包含列数据ArrayList<String>。需要将数据添加到特定数据结构中。 (我现在做唯一标识符123)。

  1. 说:ArrayList<String>需要添加到 123 :1-&gt; foo,2-&gt; bar,3-&gt; foobar,4 - &gt; barfoo

  2. 说:另一个ArrayList<String>需要添加到 456 :1-&gt; foobar,2-&gt; barfoo

  3. 说:另一个ArrayList<String>需要添加到 789 :1-&gt; foobar,2-&gt; null,3-&gt; foo

  4. 数据结构需要提供的任务如下:

    1. add(ArrayList<String>):void
    2. remove(ArrayList<String>):boolean(如果成功)
    3. 包含(Arraylist<String>):boolean
    4. 获取(ArrayList<String>):ArrayList<String>
    5. 备注:

      1. 一个数据结构 123 内的所有键组合都是唯一的。含义:如果在 123 中的一个条目包含foobarfoobarbarfoo,则另一个条目foo,{ {1}},bardoesnt matter将不被允许。允许使用neitherfoo1barfoobar的其他enrty,以及barfoofoo1,{{1 }},bar1也是允许的。

      2. 它不会发生,解析,列名不是一个键(true),在键前面。这不会发生:

        foobar
      3. 在运行时,标记为barfoo的列将无法获取数据:这不会发生:[Foobar:true;Barfoo:false;Foo:true;Bar:false] 已添加到 123 ,数据如下所示:1-&gt; key,2-&gt; ArrayList<String>,3-&gt; foo

      4. 我试过:存储每个datastructure-class两个数组。一个具有列名称,另一个具有列的数字,这些是键。在运行时,将处理键指示数组以获取所有键值(在它上面的第一个添加示例将是nullfoobar)并且它们将被连接。 (到一个字符串foo)。这是第二个bar的新密钥,其中值("foo,bar")包含所有列的数据(HashMap<String,ArrayList<String>>ArrayList<String>foo,{{ 1}})。

        我有一个bar方法:

        foobar

        和addDataListEnty看起来非常相似:

        barfoo

        这确实有效,但实际上很慢,因为需要在每个数据结构访问时创建密钥(getKeyString)。

        HashMaps,Lists,Sets(甚至谷歌番石榴)的哪种组合最好尽可能快地制作它?

0 个答案:

没有答案