我有一个对象列表,这些对象可以在列表中移位甚至被删除,我保存的这个对象,每个都有一个唯一的id,让我们调用这个id“key”。为了快速检查列表中的成员资格,我有一个映射为
的附加地图 <object.getKey(), object>
目前我用这个键调用了我的方法,然后我做了
map.contains(key)
// For delete
list.remove(map.get(key))
// For edit
Object oldObj = list.get(map.get(key))
// Modify the old obj, they are immutable so I need to set
// old position with new object
list.set(map.get(key), newObject)
可以肯定这段代码是糟糕的,但我无法围绕一个干净的解决方案,我想避免列表中的任何O(n)搜索,这在列表的情况下是明显发生的。删除和list.get!
我能想到的解决方案之一是将键映射到列表位置,但是如果地图有删除操作或插入操作,我必须从更改位置更新整个地图! O(n)。有关最有效方法的任何建议吗?
答案 0 :(得分:2)
您尚未指定您需要对列表执行何种操作,但假设您正在寻找具有可预测顺序的集合,请考虑使用LinkedHashSet
- 它保留了插入顺序时插入O(1)中的add
,remove
或contains
等操作。