Java中是否存在可以替换特定索引处的项目并且具有O(1)时间复杂度的contains方法的有序数据结构?
LinkedHashSet几乎就是我要找的东西,但你不能使用它们在索引处设置/替换项目。
答案 0 :(得分:1)
不在标准Java类中。您可以轻松地创建一个组成HashSet
和ArrayList
的类。
答案 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);