Java SortedMap
Java SortedMap接口java.util.SortedMap是java.util.Map接口的子类型,此外,存储在Java SortedMap映射中的元素在内部进行了排序。这意味着我们可以按排序顺序迭代存储在SortedMap中的元素。
TreeMap SortedMap实现
Java附带了Java的" SortedMap"接口的内置实现,该接口称为" TreeMap"(" java.util.TreeMap")。
创建一个TreeMap
我们可以通过其构造器实例化一个TreeMap实例。这是创建JavaTreeMap
实例的示例,该实例实现SortedMap
接口:
SortedMap sortedMap = new TreeMap();
使用比较器创建TreeMap
可以将" Comparator"实现传递给" TreeMap"构造函数。然后,该"比较器"将用于对存储在" SortedMap"中的键,值对的键进行排序。这是一个用Comparator创建Java TreeMap的示例:
Comparator comparator = new MyComparatorImpl(); SortedMap sortedMap = new TreeMap(comparator);
排序
Java SortedMap中的排序顺序或者是元素的自然排序顺序(如果它们实现了java.lang.Comparable),或者是我们可以赋予SortedSet的由Comparator确定的顺序。
升序与降序排序
默认情况下,元素从小到大依次递增。但是也可以使用TreeMap.descendingKeySet()方法以降序迭代元素。
迭代SortedMap
迭代JavaSortedMap
就像迭代普通JavaMap
一样。由于" SortedMap"的键是经过排序的,因此我们很可能希望按其排序顺序对键进行迭代。我们可以通过调用SortedMap的keySet()方法来迭代其键,如下所示:
SortedMap sortedMap = new TreeMap(); sortedMap.put("a", "one"); sortedMap.put("b", "two"); sortedMap.put("c", "three"); Iterator iterator = sortedMap.keySet().iterator(); while(iterator.hasNext()) { String key = (String) iterator.next(); String value = (String) sortedMap.get(key); }
请记住,如果要按降序而不是升序迭代键,请使用sortedMap.descendingKeySet()。iterator()方法,如下所示:
SortedMap sortedMap = new TreeMap(); sortedMap.put("a", "one"); sortedMap.put("b", "two"); sortedMap.put("c", "three"); Iterator iterator = sortedMap.descendingKeySet().iterator(); while(iterator.hasNext()) { String key = (String) iterator.next(); String value = (String) sortedMap.get(key); }
获取比较器使用
如果JavaSortedMap
是使用Comparator
创建的,则可以通过SortedMap``comparator()
方法获得使用的Comparator
。这是一个示例,该示例通过" comparator()"方法获取" SortedMap"所使用的" Comparator":
Comparator comparator = sortedMap.comparator();
获取第一把钥匙
" SortedMap"界面具有一种快捷方法,用于获取" SortedMap"的键集中的第一个(最低)键。该方法名为" firstKey()"。这是一个通过" firstKey()"方法获取" SortedMap"的第一把钥匙的例子:
String firstKey = (String) sortedMap.firstKey();
获取最后一个键值
" SortedMap"界面具有一种快捷方法,可获取" SortedMap"的键集中的最后一个(最高)键。该方法名为lastKey()
。这是一个通过其lastKey()
方法获取SortedMap
的最后一个键的示例:
String lastKey = (String) sortedMap.lastKey();
Head Map
SortedMap接口具有名为headMap()的方法,该方法根据使用的排序顺序返回一个新的Map,其中包含SortedMap的第一个元素。 headMap()方法采用一个参数,该参数用作返回的头部图中包含哪些元素的定界符。具有小于/早于传递给headMap()
方法的参数的键的所有元素。这是一个通过sortedMap
的headMap()
方法获得头部地图的示例:
SortedMap sortedMap = new TreeMap(); sortedMap.put("a", "1"); sortedMap.put("c", "3"); sortedMap.put("e", "5"); sortedMap.put("d", "4"); sortedMap.put("b", "2"); SortedMap headMap = sortedMap.headMap("c"); System.out.println(headMap);
返回的头部映射将包含键,值对(" a"," 1")和(" b"," 2"),因为键" a"和" b"小于/早于" c"按照此SortedMap
使用的排序顺序(自然顺序)。
Tail Map
" SortedMap"接口具有一个名为" tailMap()"的方法,该方法根据使用的排序顺序返回一个新的" Map",其中包含" SortedMap"的最后一个元素。 tailMap()方法采用一个参数,该参数用作返回的尾部映射中包含哪些元素的定界符。所有键等于或者大于传递给tailMap()方法的参数的元素。这是一个通过其" tailMap()"方法从" SortedMap"中获取尾部地图的示例:
SortedMap sortedMap = new TreeMap(); sortedMap.put("a", "1"); sortedMap.put("c", "3"); sortedMap.put("e", "5"); sortedMap.put("d", "4"); sortedMap.put("b", "2"); SortedMap tailMap = sortedMap.tailMap("c"); System.out.println(tailMap);
返回的尾部映射将包含键,值对(" c"," 3"),(" d"," 4")和(" e"," 5"),因为" c"," d"和" e"大于或者等于作为参数传递给" tailMap()"的" c"。
Submap
JavaSortedMap
也有一个名为subMap()
的方法,该方法可以返回一个新的Map
,它是SortedMap
的一个子图。 subMap()方法采用两个参数,它们作为分隔符来确定返回的子图中包含哪些元素。子图将包含具有等于或者大于第一个参数且小于第二个参数的键的所有元素。这是一个通过Java的SubMap()方法从Java的SortedMap获取子地图的示例:
SortedMap sortedMap = new TreeMap(); sortedMap.put("a", "1"); sortedMap.put("c", "3"); sortedMap.put("e", "5"); sortedMap.put("d", "4"); sortedMap.put("b", "2"); SortedMap subMap = sortedMap.subMap("b", "e"); System.out.println(subMap);
返回的子图将包含键,值对(" b"," 2",(" c"," 3")和(" d"," 4"),因为键" b"," c"和" d"等于或者大于" b"且小于" e"。