0

我需要在恒定时间内获取字符串在列表中的位置,

但没有找到任何这样的 Java 实现。

考虑到当前计算机的内存大小,也许没有必要这样做;-)

LinkedHashMap 很有趣,但不保持位置。(参考

有什么线索吗?

4

2 回答 2

0

正如@Reto Höhener 提醒的那样,就像在我的问题的参考文献中所说的那样,要保持原始插入顺序索引位置,可以将 KeySet 中的键镜像到 ArrayList 之类的东西中,使其与 HashMap 的更新保持同步并将其用于查找位置

对于列表:使用位置列表作为值填充像 ConcurrentSkipListMap 这样的有序 ConcurrentMap 应该可以解决问题。 咖啡因也可以完成这项工作,但我仍然需要看看它。

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));
于 2020-12-17T11:09:11.703 回答
0

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

于 2020-12-15T17:01:23.687 回答