【问题标题】:Iterating over a key set of a LinkedHashMap遍历 LinkedHashMap 的键集
【发布时间】:2015-07-09 16:28:17
【问题描述】:

是否可以检索 LinkedHashMap 的下一个(下一个,如已插入的下一个键值)键值?
例如。当前键值为2,下一个键值为4。我想使用下一个键的值而不进一步设置我的迭代器(或任何其他)一个索引。显然使用一个迭代器似乎并不能完成这项工作。另一个想法是将myHashMap.keySet() 返回的集合转换为其他实现类,但我不确定是否可以检索下一个元素。

有什么想法吗?

【问题讨论】:

  • 当我使用 LinkedHashMap 时,我会将 next 定义为下一个键值。
  • 公共 API 没有提供在 O(1) 中执行此操作的方法。来自keySetIterator 是您最好的选择,但是您必须一直遍历它直到您的密钥,然后获取next(如果有的话)。
  • 没关系,我是这样解决的:LinkedList<Datatype> linkedList = new LinkedList<>(); linkedList.addAll(myHashMap.keySet()); 这对我来说非常好,并且可以保留订单。
  • 这完全等同于密钥集Iterator。不是遍历迭代器,而是遍历链表。 (除了现在您将所有内容复制到另一个数据结构中。)LinkedList 访问是 O(n)。
  • 我从来没有要求过 O(1) 的解决方案,但那是行不通的。我想要一个可窥视的Iterator。正如我的问题所述,只有一个迭代器是不可能的。

标签: java iterator linkedhashmap


【解决方案1】:

假设有LinkedHashMap<K,V> linkHashMap,现在定义一个自定义方法getNextKey,它接受一个参数索引,如果有效则返回下一个索引值。

代码 sn-p(无效代码)-

public K getNextKey(int index){
    // put check if index is valid
    K[] keyArray = linkedHasMap.keySet.toArray(new K[linkedHasMap.size()]);
    return K[index+1];
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-02
    • 1970-01-01
    • 1970-01-01
    • 2012-07-07
    • 2012-03-09
    • 2012-08-31
    • 2017-03-06
    相关资源
    最近更新 更多