Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用贴图修改对象列表的有效方法_Java_Collections_Time Complexity - Fatal编程技术网

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

Java 使用贴图修改对象列表的有效方法,java,collections,time-complexity,Java,Collections,Time Complexity,我有一个对象列表,这些对象可以在列表中移动位置,甚至可以被删除,我保存的这个对象,每个对象都有一个唯一的id,让我们称这个id为“键”。为了快速检查列表中的成员资格,我有一个额外的映射,映射为 目前我用这个键调用了我的方法,我做了一个 map.contains(key) // For delete list.remove(map.get(key)) // For edit Object oldObj = list.get(map.get(key)) // Modify the old obj,

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

目前我用这个键调用了我的方法,我做了一个

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.remove和list.get的情况下发生的


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

< p>您没有指定列表所需的确切内容,但是假设您正在寻找具有可预测顺序的集合,请考虑使用-IT保留插入顺序,而STILE允许操作如“代码>添加< /代码>,
删除
在O(1)中包含

也许您不需要该列表。你不能使用LinkedHashMap吗?它将允许您按照条目添加到映射中的顺序迭代条目。我想你是对的,如果我使用LinkedhashMap进行基于索引的查询,我可以执行map.values().toArray()[index]。我会尝试一下,如果你能写下来作为答案,我可以接受。我现在使用列表的原因是为了维护秩序,我使用这个列表来获取活页夹的数据。如果我说在“i”位置获取child,我需要获取第i个对象。