我有一个LinkedHashMap,我的键是一个ID,我想要实现的是能够查找一个ID,如果存在,则从该条目到地图末尾拥有一个迭代器。我到目前为止尝试过的方法:
Map<String, Obj> map = new LinkedHashMap<>();
Iterator it = map.entrySet().iterator();
但是,有没有办法使迭代器从特定对象开始而不进行线性搜索并自己找到它?
我有一个LinkedHashMap,我的键是一个ID,我想要实现的是能够查找一个ID,如果存在,则从该条目到地图末尾拥有一个迭代器。我到目前为止尝试过的方法:
Map<String, Obj> map = new LinkedHashMap<>();
Iterator it = map.entrySet().iterator();
但是,有没有办法使迭代器从特定对象开始而不进行线性搜索并自己找到它?
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)复杂度的迭代器。LinkedHashMap
。HashMap
中。然后通过从映射中查找键来搜索节点。当您获取节点时,您可以从链接列表中遍历其余的后续条目,或者您可以通过从映射和链接列表中同时删除它来在O(1)中删除它。tailMap
可以帮助你实现这个功能(map.tailMap(key).iterator()
),但是这个接口并没有被LinkedHashMap实现。如果TreeMap(可能需要自定义比较器)是你的情况下适当的替代品,请考虑使用它。