带有set()方法的Java数据结构和O(1)包含()

时间:2016-12-13 23:32:57

标签: java collections big-o

Java中是否存在可以替换特定索引处的项目并且具有O(1)时间复杂度的contains方法的有序数据结构?

LinkedHashSet几乎就是我要找的东西,但你不能使用它们在索引处设置/替换项目。

2 个答案:

答案 0 :(得分:1)

不在标准Java类中。您可以轻松地创建一个组成HashSetArrayList的类。

答案 1 :(得分:1)

您可以使用ArrayList中的项目存储,并使用HashMap<ItemType, Integer>从元素类型映射到List中等价类中允许访问元素的元素数量使用列表并允许您测试,如果项目包含使用

Integer i = map.get(object);
boolean contained = ( i != null ) && ( i > 0 );

更新地图以添加元素:

map.merge(object, 1, Integer::sum);

删除元素:

map.computeIfPresent(object, (k, v) -> v > 1 ? v - 1 : null);

如果在列表中替换了某个项目,则可以将其作为

处理
map.merge(newValue, 1, Integer::sum);
map.computeIfPresent(oldValue, (k, v) -> v > 1 ? v - 1 : null);