我需要在恒定时间内获取字符串在列表中的位置,
但没有找到任何这样的 Java 实现。
考虑到当前计算机的内存大小,也许没有必要这样做;-)
LinkedHashMap 很有趣,但不保持位置。(参考)
有什么线索吗?
我需要在恒定时间内获取字符串在列表中的位置,
但没有找到任何这样的 Java 实现。
考虑到当前计算机的内存大小,也许没有必要这样做;-)
LinkedHashMap 很有趣,但不保持位置。(参考)
有什么线索吗?
正如@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));
自定义实现可以保持列表和地图并行。包含作为键的字符串和作为值的列表索引的映射。假设每个字符串只出现一次。