java - 使用 map 修改对象列表的有效方法

标签 java collections time-complexity

我有一个对象列表,这些对象可以在列表中移动位置甚至被删除,我正在保存的这个对象,每个对象都有一个唯一的id,让我们称这个id为“键”。为了快速检查列表中的成员资格,我有一个附加 map ,映射为

<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) 搜索,这显然发生在列表的情况下。删除并列出.get!

我能想到的解决方案之一是将键映射到列表位置,但如果映射有删除操作或插入操作,我必须从更改的位置更新整个映射!还是O(n)。关于最有效的方法有什么建议吗?

最佳答案

您尚未指定具体需要对列表执行什么操作,但假设您正在寻找具有可预测顺序的集合,请考虑使用 LinkedHashSet - 它保留插入顺序,同时允许在 O(1) 中执行诸如添加、删除或包含等操作。

关于java - 使用 map 修改对象列表的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31487439/

相关文章:

java - 有人让动物嗅探器插件工作吗?

java - 时间单位错误

java - 迭代 Collection,避免在循环中删除对象时出现 ConcurrentModificationException

python - 比较更多嵌套字典(节省时间)

algorithm - Big-O for While 循环

Java XML 读取器错误

java - android fromhtml 无法识别所有 HTML 标签

java - 带有 GNU trove 的整数排序集

python - 如何重写此函数以实现 OrderedDict?

python - 用于查找可由列表中其他单词组成的最长单词的python代码的时间复杂度