存储具有K-V列的表的最佳数据结构是什么?

时间:2019-07-11 14:40:50

标签: java arraylist multidimensional-array data-structures hashmap

我正在使用Apache POI从Word文档中提取表。这些表具有键的第一列,值的第二列,并且可以是任意数量的此类配对列。目前,我正在迭代每个表,每一行,每个单元格,以按行顺序将所有单元格依次存储在List<String>

最终目标是将结果存储在CSV中,其中包含2列Attribute nameAttribute valueK-V列应以自上而下的方式进行迭代,然后进行下一个2列(如果存在)。

我正在遍历List<String>i是索引计数器)并使用下面的伪代码来这样做:

  • 使用布尔值keyBvalueB并将keyB初始化为true,并将valueB初始化为false
  • If(keyB)然后将当前字符串存储为Attribute name并执行i++。将keyB标记为false,并将valueB标记为true
  • if(valueB)然后将当前字符串存储为Attribute value,并进行i=i+<NO_OF_COLUMNS> -1到下一行存在的键的位置,并将keyB标记为true。 / li>
  • 我还要存储topKeyInd,它已初始化为第一行的键索引(List的第0个元素)
  • 当我们位于最后一行的值单元格时,我就使用了条件
    if(i+<NO_OF_COLUMNS> -1)> List.size()),然后我们必须从下一对K-V列开始(如果存在)。因此,i = topKeyInd +2进入第3列的第一个键单元格,并相应地更新topKeyInd
  • 继续上述过程,直到到达List的最后一个元素。

这似乎很复杂,有没有更好的处理方法?

1 个答案:

答案 0 :(得分:0)

我正在使用ConcurrentHashMap(例如:ConcurrentHashMap),因为它既快速又线程安全:)

例如:

public static ConcurrentHashMap<String, String> hashMap = new concurrentHashMap<>();

for( int i = 0 ; i< list.size(); i+=2){
    hashMap.put(list.get(i), list.get(i+1));
}

Here,您有一些简单地图示例。