【问题标题】:Iterating a treemap for fixed number of times迭代树形图固定次数
【发布时间】:2011-01-06 17:50:28
【问题描述】:

如果我有一个包含字符串和双精度的树形图。无论如何要从地图中检索前 10 个键?

【问题讨论】:

  • 为什么不能在迭代器上调用 next() 十次?
  • 成功了!非常感谢。

标签: java iteration treemap


【解决方案1】:

如果您想要键/值对,请通过treeMap.entrySet().iterator() 获取迭代器,如果您只关心键,请通过treeMap.keySet().iterator() 获取迭代器,然后调用iterator.next() 10 次或只要iterator.hasNext() 返回true

List<Map.Entry<String, Double>> firstTen = new ArrayList<Map.Entry<String, Double>>(10);
Iterator<String, Double> iterator = treeMap.entrySet().iterator();
for (int i = 0; iterator.hasNext() && i < 10; i++) {
    firstTen.add(iterator.next());
}

【讨论】:

    【解决方案2】:

    JDK 中没有,但第三方库中有一些方法可以做到这一点。

    例如 @987654321@ 来自 guava

    【讨论】:

    • @Rushdi Shams,如果没有上下文,很难给出一个例子,例如你想用前 10 个键做什么。
    【解决方案3】:

    由于TreeMapNavigableMap,您应该查看该接口中的方法。没有什么可以让您选择第一个 n,但您可以选择所有键小于给定键的条目,等等。

    否则,我将只使用 Iterator 并在 n 迭代后停止。

    【讨论】:

      【解决方案4】:

      entrySet() 包装在一个列表中并创建一个subList()

      SortedMap<String,Double> treeMap = new TreeMap<String, Double>();
      List<Entry<String, Double>> firstTen = 
          new ArrayList<Map.Entry<String,Double>>(treeMap.entrySet())
          .subList(0, 10);
      for(Entry<String, Double> entry : firstTen){
          // do something with entries
      }
      

      缺点:整个地图会被复制到列表中。

      【讨论】:

        【解决方案5】:

        它与 dkarp 和 sean 提供的代码 sn-ps 一起工作。但是,它也适用于 DJClayworth 的建议。以下是我的解决方法:

            c=sorted_map.keySet();
        
            Iterator itr=c.iterator();
            String s="";
            while (i<iteratesize&&itr.hasNext()){
                s=(String) itr.next();
                System.out.println(s);
                s="";
                i++;
            }
        

        非常感谢大家的帮助。我真的很感激。

        【讨论】:

          猜你喜欢
          • 2013-12-14
          • 1970-01-01
          • 2013-01-27
          • 2019-08-07
          • 1970-01-01
          • 2021-07-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多