Java TreeMap
Java TreeMap
TreeMap 是一个集合,它按键排序后存储键值对。
它是 java.util 包的一部分,并实现了 Map 接口。
提示:与不维护顺序的HashMap不同,TreeMap会保持其键的排序。
创建 TreeMap
创建一个存储 String 键和 String 值的 TreeMap:
示例
import java.util.TreeMap; // 导入 TreeMap 类
TreeMap<String, String> capitalCities = new TreeMap<>();
现在您可以使用诸如put()、get()和remove()之类的方法来管理已排序的键值对。
添加项目
使用 put() 方法添加键值对:
示例
import java.util.TreeMap;
public class Main {
public static void main(String[] args) {
TreeMap<String, String> capitalCities = new TreeMap<>();
capitalCities.put("England", "London");
capitalCities.put("India", "New Dehli");
capitalCities.put("Austria", "Wien");
capitalCities.put("Norway", "Oslo");
capitalCities.put("Norway", "Oslo"); // Duplicate
capitalCities.put("USA", "Washington DC");
System.out.println(capitalCities);
}
}
输出:键按字母顺序排序(例如,{Austria=Wien, England=London, India=New Dehli, Norway=Oslo, USA=Washington DC})。
注意:重复项(例如"Norway")只会出现一次。
访问项目
使用 get() 和键值来访问其值:
删除项目
使用 remove() 按键删除键值对:
使用 clear() 删除所有项目:
TreeMap 大小
使用 size() 来计算键值对的数量:
注意:大小仅统计唯一键的数量。如果一个键被多次添加,则只保留最后一次添加的值。
遍历 TreeMap
使用 for-each 循环遍历 TreeMap 中的所有元素。
注意: 如果只需要键,请使用 `keySet()` 方法;如果只需要值,请使用 values() 方法。
示例
// 打印键和值
for (String i : capitalCities.keySet()) {
System.out.println("key: " + i + " value: " + capitalCities.get(i));
}
TreeMap vs HashMap
| 特性 | HashMap |
TreeMap |
顺序 | 不保证顺序 | 按键排序 | 空键 | 允许一个空键 | 不允许空键 | 性能 | 更快(无需排序) | 更慢(保持排序顺序) |
|---|
提示:为了获得更好的性能,请使用HashMap;当您需要排序的键时,请使用TreeMap。
var 关键字
从 Java 10 开始,您可以使用 var 关键字声明一个 TreeMap 变量,而无需重复指定类型。编译器会根据您赋值的值自动推断类型。
这样可以缩短代码,但许多开发者为了清晰起见仍然使用完整的类型。由于var是有效的Java类型,您可能会在其他代码中看到它,因此了解它的存在很有帮助。
示例
// Without var
TreeMap<String, String> capitalCities = new TreeMap<String, String>();
// With var
var capitalCities = new TreeMap<String, String>();
Map 接口
注意: 有时您会在 Java 代码中同时看到 Map 和 TreeMap,例如:
import java.util.Map;
import java.util.TreeMap;
Map<String, String> capitalCities = new TreeMap<>();
这意味着变量 (capitalCities) 被声明为 Map(接口),但它存储的是一个 TreeMap 对象(实际的映射)。由于 TreeMap 实现了 Map 接口,因此这是可行的。
虽然工作方式相同,但有些开发者更喜欢这种方式,因为它让他们以后可以更灵活地更改类型。

