Java中的TreeMap subMap()方法及其示例
Java中的TreeMap是一种有序的key-value存储结构,具有高效的查找和插入操作。而subMap()方法则是TreeMap的一个重要功能,可以返回一个子Map,用于筛选满足特定要求的key-value对。
subMap()方法的用法及语法
subMap()方法可以根据low和high两个参数,返回一个包含所有位于当前map中,key位于low到high之间的子Map。其中low和high都可以指定是否包含在返回的子Map中。
subMap()方法的语法如下所示:
public SortedMap<K,V> subMap(K low, K high)
subMap()方法的示例
import java.util.TreeMap;
public class SubMapExample {
public static void main(String[]args){
//创建一个TreeMap,并添加元素
TreeMap<Integer,String> treeMap = new TreeMap<Integer,String>();
treeMap.put(1, "高");
treeMap.put(2, "昌");
treeMap.put(3, "祥");
treeMap.put(4, "加");
treeMap.put(5, "油");
treeMap.put(6, "少");
treeMap.put(7, "年");
//获取子Map,范围在[2,5)
SortedMap<Integer,String> subMap = treeMap.subMap(2, 5);
System.out.println(subMap);
}
}
代码说明如下:
- 首先创建一个TreeMap,并添加一些元素。
- 接着,使用subMap()方法获取范围在[2,5)中key的子Map。
- 最后,将结果打印输出。
运行结果如下:
{2=昌, 3=祥, 4=加}
可以看到,最终子Map中只包含key为2、3、4的元素。
subMap()方法的参数
subMap()方法的参数中,low和high指定的范围可以按照自然顺序进行筛选。具体来说,如果low的值和high的值都在TreeMap中找到了匹配的key,那么它们之间的所有元素都将被返回。
但是在实际应用中,如果需要自定义排序规则,则可以继承Comparator接口,并重写compare()方法。
例如,下面的示例中,我们为TreeMap设置了一个自定义的比较器,并使用subMap()方法获取了范围在[“a”,“c”]中的子Map。
import java.util.Comparator;
import java.util.SortedMap;
import java.util.TreeMap;
public class SubMapExample2 {
public static void main(String[] args) {
// 创建TreeMap,并配置自定义比较器
TreeMap<String, Integer> treeMap = new TreeMap<String, Integer>(new Comparator<String>() {
public int compare(String a, String b) {
return a.compareToIgnoreCase(b);
}
});
// 添加一些元素
treeMap.put("ab", 1);
treeMap.put("bc", 2);
treeMap.put("cd", 3);
treeMap.put("de", 4);
treeMap.put("ef", 5);
treeMap.put("fg", 6);
treeMap.put("gh", 7);
// 获取范围在["a","c"]之间的子Map
SortedMap<String, Integer> subMap = treeMap.subMap("a", "c");
System.out.println(subMap);
}
}
运行结果如下:
{ab=1, bc=2}
可以看到,最终子Map中只包含key为“ab”、“bc”的元素,这是因为它们在自定义比较器中比“c”小。
总结
subMap()方法是Java中TreeMap类的重要功能,可以用于获取键值对存储结构的子集。它的基本语法如下:
public SortedMap<K,V> subMap(K low, K high)
其中low和high参数指定的范围可以按照自然顺序,也可以按照自定义的比较器进行筛选。在实际应用中,可以根据具体需求选择合适的参数范围,并结合其他功能一起使用,以实现更加复杂的功能。
在使用subMap()方法时,需要注意以下几点:
- subMap()方法返回的是原TreeMap的子集,对返回的子Map进行修改,会影响到原集合。
- 如果修改了原TreeMap的CaseInsensitiveComparator(大小写敏感性比较器),则会导致subMap()方法可能返回错误的结果。
- subMap()方法返回的子Map中,key是按顺序排序的。如果需要按照value排序,则可以采用其他的方法,如使用Java里的Collection.sort()方法等。
综上所述,subMap()方法作为TreeMap类的一个重要功能,在Java中有着广泛的应用场景。掌握subMap()方法的使用方法,可以大大提高开发效率,实现更加复杂的功能。