Java:来自树映射项的迭代器?
在Java中,Java:来自树映射项的迭代器?,java,containers,treemap,Java,Containers,Treemap,在Java中,TreeMap使用RB树存储条目,允许使用map.entrySet().iterator()进行顺序迭代,同时保证在日志(N)时间内插入和查找 TreeMap还提供了查找给定键的上下界的方法:map.floorEntry(k),map.ceilingEntry(),map.lowerEntry(k)和map.higherEntry()。但是,它们的返回值是一个Map.Entry实例,不允许直接访问相邻的条目。我想参观一个假想入口的准邻居,因为它有钥匙 有没有一种方法可以从树映射条目
TreeMap
使用RB树存储条目,允许使用map.entrySet().iterator()
进行顺序迭代,同时保证在日志(N)时间内插入和查找
TreeMap还提供了查找给定键的上下界的方法:map.floorEntry(k)
,map.ceilingEntry()
,map.lowerEntry(k)
和map.higherEntry()
。但是,它们的返回值是一个Map.Entry
实例,不允许直接访问相邻的条目。我想参观一个假想入口的准邻居,因为它有钥匙
有没有一种方法可以从树映射条目中获取迭代器,或者执行我正在尝试的操作
更习惯于C++的std::map
类,我在这里不知所措
注意我愿意使用java.util以外的容器库解决方案,只要它有一个具有合理时间复杂度保证的排序映射容器。您可以将返回的
map.Entry
的键作为tailMap(K fromKey)
或headMap(K toKey)
中的参数,然后迭代结果。这几乎就是我想要的;但是,考虑到我想要获取给定键之前和之后的两个条目,我必须调用这两个方法,这意味着两次查找,这似乎浪费了CPU周期。好的,对不起,我误解了你的答案,你显然是指map.tailMap(map.lowerEntry(k).getKey())
。另一个解决方案是根据您的需要制作自己的树映射迭代器,但这不是一项容易的任务