如何在 Java 中迭代 TreeMap?

javaobject oriented programmingprogramming

借助 AbstractMap 类,Java 的 TreeMap 实现了 Map 接口和 NavigableMap。此映射使用键的固有顺序或创建映射时提供的 Comparator 进行排序。

在 Java 中使用 TreeMap 时,目标是迭代其元素。但是,由于 TreeMap 不是集合,因此我们无法直接使用迭代器对其进行迭代。

使用的方法

要在 Java 中迭代 TreeMap,我们需要利用 TreeMap.entrySet() 方法。此函数返回 TreeMap 中保存的所有映射的集合视图 (SetMap.Entry>)。

可以使用 Map.Entry 接口的 getKey() 和 getValue() 函数在迭代过程中访问键值对。

这种方法很典型,建议在循环中需要映射的键和值时使用。

TreeMap.entrySet()

要构建与 TreeMap 具有相同对象的集合,请使用 Java java.util.TreeMap.entrySet() 方法。我们可以以集合格式访问和使用 TreeMap 的元素,因为它基本上返回 TreeMap 的集合视图。作为替代方案,我们可以创建一个新的集合并将 TreeMap 的组件添加到其中。

语法


tree_map.entrySet()

此技术不需要任何参数。作为返回值,该方法返回一个包含与 TreeMap 相同组件的集合。

Map 的 getKey() 和 getValue() 方法可用于反复迭代 Java.interface for entry 中 TreeMap 中的键值对。当循环中需要映射键和值时,经常使用并建议使用此方法。

getKey()

代码创建一个名为"tlp"的 TreeMap 并向其中添加一些名称/url 对。然后,它使用 for-each 循环遍历 TreeMap 中的条目并打印每个键值对。

算法

  • 步骤 1 - 创建一个名为"tlp"的 TreeMap 来存储名称/url 对。

  • 步骤 2 - 使用 put() 方法将名称/url 对添加到 TreeMap。

  • 步骤 3 - 我们利用 for-each 循环遍历 TreeMap 中的条目。

  • 步骤 4 - 对于每个条目,使用 Map.Entry 接口的 getKey() 和 getValue() 函数检索键和值。

  • 步骤 5 - 在 System.out.println() 函数的帮助下,我们打印键值对。

示例


// Java 程序用于迭代 TreeMap

import java.util.Map;
import java.util.TreeMap;

public class IterationExamplebyTLP {
   public static void main(String[] arg){
      Map<String, String> tlp
         = new TreeMap<String, String>();

      // 输入名称/url 对
      tlp.put("TLP", "tutorialspoint.com");
      tlp.put("Guide", "guide.tutorialspoint.com");
      tlp.put("For", "for.tutorialspoint.com");
      tlp.put("Students", "www.tutorialspoint.com");

      for (Map.Entry<String, String>
      entry : tlp.entrySet())
      System.out.println( "[" + entry.getKey() + ", " + entry.getValue() + "]");
   }
}

输出

[For, for.tutorialspoint.com]
[Guide, guide.tutorialspoint.com]
[Students, www.tutorialspoint.com]
[TLP, tutorialspoint.com]

entrySet()

代码创建一个 TreeMap 对象并向其添加 3 个键值对。然后,它使用 3 种不同的方法迭代 TreeMap 中的条目:for-each 循环、forEach() 方法和迭代器。这三种方法的代码输出都是相同的。

算法

  • 步骤 1 - 创建一个名为"tm"的 TreeMap 对象来存储整数和字符串的键值对。

  • 步骤 2 - 借助 put() 方法向 TreeMap 添加一些键值对。

  • 步骤 3 - 借助 entrySet() 方法从 TreeMap 获取条目集。

  • 步骤 4 - 使用 for-each 循环遍历条目,打印每个键值对。

  • 步骤 5 - 打印一个空白行。

  • 步骤 6 - 使用forEach() 方法对条目集进行再次迭代,打印每个键值对。

  • 步骤 7 - 打印一个空白行。

  • 步骤 8 - 使用 iterator() 方法为条目集创建一个迭代器。

  • 步骤 9 - 初始化名为"entry"的 Map.Entry 对象以保存当前条目。

  • 步骤 10 - 您必须使用 while 循环通过迭代器迭代条目。

  • 步骤 11 - 在循环中,从条目对象中检索键和值。之后,打印它们。

  • 步骤 12 - 循环继续进行,直到没有更多条目。

  • 步骤 13 - 程序输出 TreeMap 中的键值对。

示例


// Java 程序遍历 TreeMap 中的条目

import java.util.*;

public class TLP {

   // Main driver method
   public static void main(String[] args){

      TreeMap<Integer, String> tm
      = new TreeMap<Integer, String>();

      tm.put(1, "Tutorialspoint");
      tm.put(2, "Code");
      tm.put(3, "Guide");

      Set<Map.Entry<Integer, String> > entries
      = tm.entrySet();

      for (Map.Entry<Integer, String> entry : entries) {
         System.out.println(entry.getKey() + "=" + entry.getValue());
      }

      System.out.println();

      entries.forEach(entry -> {
         System.out.println(entry.getKey() + "=" + entry.getValue());
      });

      System.out.println();

      Iterator<Map.Entry<Integer, String> > iterator
         = entries.iterator();

      Map.Entry<Integer, String> entry = null;

      while (iterator.hasNext()) {
         entry = iterator.next();
         System.out.println(entry.getKey() + "=" + entry.getValue());
      }
   }
}

输出

1=Tutorialspoint
2=Code
3=Guide

1=Tutorialspoint
2=Code
3=Guide

1=Tutorialspoint
2=Code
3=Guide

结论

关于在 Java 中迭代 TreeMap,有几个关键方法需要记住。TreeMap 类实现了 Map 接口和 NavigableMap,允许基于键或提供的 Comparator 进行排序。

但是,我们必须使用 TreeMap,因为它不是 Collection。要迭代其元素,请使用 entrySet() 方法。我们可以使用 Map.Entry 接口的 getKey() 和 getValue() 方法在迭代过程中获取键值对。


相关文章