使用地图修改对象列表的有效方法

时间:2015-07-18 03:20:06

标签: java collections time-complexity

我有一个对象列表,这些对象可以在列表中移位甚至被删除,我保存的这个对象,每个都有一个唯一的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)。有关最有效方法的任何建议吗?

1 个答案:

答案 0 :(得分:2)

您尚未指定您需要对列表执行何种操作,但假设您正在寻找具有可预测顺序的集合,请考虑使用LinkedHashSet - 它保留了插入顺序时插入O(1)中的addremovecontains等操作。