gpt4 book ai didi

java - 来自 LinkedHashMap 中特定对象的迭代器

转载 作者:搜寻专家 更新时间:2023-11-01 03:35:59 24 4
gpt4 key购买 nike

我有一个 LinkedHashMap,我有我的 key 作为 ID,我想要实现的是让我能够查找 ID,如果它存在,则有一个从该条目到末尾的迭代器 map 。到目前为止我尝试了什么

Map<String, Obj> map = new LinkedHashMap<>();
Iterator it = map.entrySet().iterator();

但有没有一种方法可以让迭代器从特定对象开始,而无需进行线性搜索并自己找到它?

最佳答案

不,LinkedHashMap 中没有这样的功能。

但是你可以用一个 List 来模拟它,代价只是一次遍历:

    Map<String, Object> map = new LinkedHashMap<>();
Map<String, Integer> indexesMap = new HashMap<>(map.size());

int index = 0;
for (String key : map.keySet()) {
indexesMap.put(key, index++);
}

List<Entry<String, Object>> entries = new ArrayList<>(map.entrySet());

// ...

String key = ...

Iterator<Entry<String, Object>> iterator = entries.listIterator(indexesMap.get(key));

在每次后续调用 entries.listIterator 时,您将获得复杂度为 O(1) 的迭代器。

编辑

如果您还希望删除操作为 O(1),则不应使用 LinkedHashMap

您可以实现自己的双向链表,并将其节点存储在HashMap 中。然后通过 map 中的键搜索节点。当你得到节点时,你可以从链表中遍历其余的后续条目,或者你可以通过从映射和链表中同时删除它来在 O(1) 中将其删除。

关于java - 来自 LinkedHashMap 中特定对象的迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31521621/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com