什么(散列)java数据结构或自定义实现可以让我在恒定时间内获得字符串的位置

3ks5zfa0  于 2021-07-03  发布在  Java
关注(0)|答案(2)|浏览(270)

我需要在固定时间内得到一个字符串在列表中的位置,
但是没有找到任何这样的java实现。
考虑到当前计算机的内存大小,也许没有必要这样做;-)
linkedhashmap很有趣,但并不保持一个位置
有什么线索吗?

niknxzdl

niknxzdl1#

正如@reto h所提醒的öhener在我的问题ref中说过,为了保持原始的插入顺序索引位置,可以在类似arraylist的东西中镜像键集中的键,使其与hashmap的更新保持同步,并使用它来查找位置
对于列表:用位置列表作为值填充有序的concurrentmap(如concurrentskiplistmap)应该可以做到这一点。卡菲也可以做这项工作,但我还需要看看。

final int[] index = {0};
     Stream<ComplexObject> t = someListOfComplexObject.stream();
     ConcurrentMap<String, List<Integer>> m = 
          t.collect(Collectors.groupingBy(
               e -> e.getComplexStringElem(),
               Collectors.mapping(
                    e -> index[0]++,
                    Collectors.toList()
               ),
               ConcurrentSkipListMap::new));
jqjz2hbq

jqjz2hbq2#

自定义实现可以并行地保持列表和Map。包含字符串作为键及其列表索引作为值的Map。假设每个字符串只出现一次。

相关问题