java treemap截取
时间: 2023-07-05 13:34:24 浏览: 141
如果你想截取 TreeMap 中的一段子 Map,可以使用 TreeMap 的 subMap() 方法。该方法接受两个参数,分别表示子 Map 的起始键(包含)和结束键(不包含),返回一个新的 TreeMap 对象,它包含原 TreeMap 中键在指定范围内的键值对。
示例代码如下:
```java
TreeMap<Integer, String> treeMap = new TreeMap<>();
treeMap.put(1, "one");
treeMap.put(2, "two");
treeMap.put(3, "three");
treeMap.put(4, "four");
treeMap.put(5, "five");
// 截取键在 [2, 4) 范围内的子 Map
TreeMap<Integer, String> subMap = new TreeMap<>(treeMap.subMap(2, 4));
System.out.println(subMap); // 输出 {2=two, 3=three}
```
注意,subMap() 方法返回的子 Map 与原 Map 共享相同的底层数据结构,因此对子 Map 的修改会影响到原 Map;反之亦然。如果你需要对子 Map 进行修改而不影响到原 Map,可以使用 subMap() 方法返回的子 Map 的 clone() 方法创建一个副本。
示例代码如下:
```java
TreeMap<Integer, String> treeMap = new TreeMap<>();
treeMap.put(1, "one");
treeMap.put(2, "two");
treeMap.put(3, "three");
treeMap.put(4, "four");
treeMap.put(5, "five");
// 截取键在 [2, 4) 范围内的子 Map,并修改其键值
TreeMap<Integer, String> subMap = new TreeMap<>(treeMap.subMap(2, 4));
subMap.put(3, "modified three");
System.out.println(subMap); // 输出 {2=two, 3=modified three}
System.out.println(treeMap); // 输出 {1=one, 2=two, 3=modified three, 4=four, 5=five}
```
在上面的代码中,我们修改了 subMap 中键为 3 的值,但是 treeMap 中与之对应的值也被修改了,这是因为 subMap 和 treeMap 共享相同的底层数据结构。如果我们需要对 subMap 进行修改而不影响到 treeMap,可以使用 subMap 的 clone() 方法创建一个副本,如下所示:
```java
TreeMap<Integer, String> treeMap = new TreeMap<>();
treeMap.put(1, "one");
treeMap.put(2, "two");
treeMap.put(3, "three");
treeMap.put(4, "four");
treeMap.put(5, "five");
// 截取键在 [2, 4) 范围内的子 Map,并修改其键值
TreeMap<Integer, String> subMap = new TreeMap<>(treeMap.subMap(2, 4).clone());
subMap.put(3, "modified three");
System.out.println(subMap); // 输出 {2=two, 3=modified three}
System.out.println(treeMap); // 输出 {1=one, 2=two, 3=three, 4=four, 5=five}
```
在上面的代码中,我们使用 subMap(2, 4).clone() 方法创建了一个 subMap 的副本,对副本进行修改不会影响到原 Map。
阅读全文