Java TreeMap 类
提示
- TreeMap基本概念:
TreeMap
类在Java集合框架中实现树形数据结构,提供元素的自然排序(升序)功能。 - TreeMap的元素插入和访问方法:
TreeMap
允许使用put()
插入键值对、get()
访问元素,以及entrySet()
,keySet()
, 和values()
方法遍历映射。 - TreeMap的导航方法:提供
firstKey()
,lastKey()
,higherKey()
,lowerKey()
,ceilingKey()
,floorKey()
等方法来导航和操作键值对,支持根据键的顺序获取和处理元素。
Java 集合框架中的 TreeMap
类提供了树形数据结构的实现。
它实现了 NavigableMap 接口。
创建 TreeMap
要创建一个 TreeMap
,我们首先需要导入 java.util.TreeMap
包。导入包后,我们就可以用以下方式在 Java 中创建一个 TreeMap
。
TreeMap<Key, Value> numbers = new TreeMap<>();
在上面的代码中,我们创建了一个名为 numbers
的 TreeMap
,没有传入任何参数。在这种情况下,TreeMap
中的元素会自然排序(升序)。
然而,我们可以通过使用 Comparator
接口来自定义元素的排序。我们将在本教程后面学习这一点。
这里,
Key
- 用于将每个元素(值)与映射中的键相关联的唯一标识符Value
- 映射中键所关联的元素
TreeMap 的方法
TreeMap
类提供了多种方法,允许我们对映射执行操作。
向 TreeMap 插入元素
put()
- 向映射中插入指定的键/值映射(条目)putAll()
- 将指定映射中的所有条目插入到此映射中putIfAbsent()
- 如果指定的键在映射中不存在,则向映射中插入指定的键/值映射
例如,
import java.util.TreeMap;
class Main {
public static void main(String[] args) {
// 创建偶数的 TreeMap
TreeMap<String, Integer> evenNumbers = new TreeMap<>();
// 使用 put()
evenNumbers.put("Two", 2);
evenNumbers.put("Four", 4);
// 使用 putIfAbsent()
evenNumbers.putIfAbsent("Six", 6);
System.out.println("偶数的 TreeMap: " + evenNumbers);
// 创建数字的 TreeMap
TreeMap<String, Integer> numbers = new TreeMap<>();
numbers.put("One", 1);
// 使用 putAll()
numbers.putAll(evenNumbers);
System.out.println("数字的 TreeMap: " + numbers);
}
}
输出
偶数的 TreeMap: {Four=4, Six=6, Two=2}
数字的 TreeMap: {Four=4, One=1, Six=6, Two=2}
访问 TreeMap 元素
1. 使用 entrySet(), keySet() 和 values()
entrySet()
- 返回 treemap 的所有键/值映射(条目)的集合keySet()
- 返回 tree map 的所有键的集合values()
- 返回 tree map 的所有值的集合
例如,
import java.util.TreeMap;
class Main {
public static void main(String[] args) {
TreeMap<String, Integer> numbers = new TreeMap<>();
numbers.put("One", 1);
numbers.put("Two", 2);
numbers.put("Three", 3);
System.out.println("TreeMap: " + numbers);
// 使用 entrySet()
System.out.println("键/值映射: " + numbers.entrySet());
// 使用 keySet()
System.out.println("键: " + numbers.keySet());
// 使用 values()
System.out.println("值: " + numbers.values());
}
}
输出
TreeMap: {One=1, Three=3, Two=2}
键/值映射: [One=1, Three=3, Two=2]
键: [One, Three, Two]
值: [1, 3, 2]
2. 使用 get() 和 getOrDefault()
get()
- 返回与指定键关联的值。如果未找到键,则返回 null。getOrDefault()
- 返回与指定键关联的值。如果未找到键,则返回指定的默认值。
例如,
import java.util.TreeMap;
class Main {
public static void main(String[] args) {
TreeMap<String, Integer> numbers = new TreeMap<>();
numbers.put("One", 1);
numbers.put("Two", 2);
numbers.put("Three", 3);
System.out.println("TreeMap: " + numbers);
// 使用 get()
int value1 = numbers.get("Three");
System.out.println("使用 get(): " + value1);
// 使用 getOrDefault()
int value2 = numbers.getOrDefault("Five", 5);
System.out.println("使用 getOrDefault(): " + value2);
}
}
输出
TreeMap: {One=1, Three=3, Two=2}
使用 get(): 3
使用 getOrDefault(): 5
这里,getOrDefault()
方法未找到键 Five
。因此,它返回了指定的默认值 5
。
移除 TreeMap 元素
remove(key)
- 返回并移除与指定键关联的条目remove(key, value)
- 只有当指定的键与指定的值关联时才移除条目,并返回一个布尔值
例如,
import java.util.TreeMap;
class Main {
public static void main(String[] args) {
TreeMap<String, Integer> numbers = new TreeMap<>();
numbers.put("One", 1);
numbers.put("Two", 2);
numbers.put("Three", 3);
System.out.println("TreeMap: " + numbers);
// 单参数 remove 方法
int value = numbers.remove("Two");
System.out.println("移除的值: " + value);
// 双参数 remove 方法
boolean result = numbers.remove("Three", 3);
System.out.println("条目 {Three=3} 是否被移除? " + result);
System.out.println("更新后的 TreeMap: " + numbers);
}
}
输出
TreeMap: {One=1, Three=3, Two=2}
移除的值 = 2
条目 {Three=3} 是否被移除? True
更新后的 TreeMap: {One=1}
替换 TreeMap 元素
replace(key, value)
- 用新的value
替换由指定key
映射的值replace(key, old, new)
- 只有当旧值已与指定键关联时才用新值替换旧值replaceAll(function)
- 用指定function
的结果替换映射中的每个值
例如,
import java.util.TreeMap;
class Main {
public static void main(String[] args) {
TreeMap<String, Integer> numbers = new TreeMap<>();
numbers.put("First", 1);
numbers.put("Second", 2);
numbers.put("Third", 3);
System.out.println("原始 TreeMap: " + numbers);
// 使用 replace()
numbers.replace("Second", 22);
numbers.replace("Third", 3, 33);
System.out.println("使用 replace 的 TreeMap: " + numbers);
// 使用 replaceAll()
numbers.replaceAll((key, oldValue) -> oldValue + 2);
System.out.println("使用 replaceAll 的 TreeMap: " + numbers);
}
}
输出
原始 TreeMap: {First=1, Second=2, Third=3}
使用 replace(): {First=1, Second=22, Third=33}
使用 replaceAll(): {First=3, Second=24, Third=35}