本示例说明如何以相反的顺序迭代Java TreeMap。该示例还显示了如何使用reverseOrder,descendingKeySet和DescendingMap方法以相反的顺序迭代TreeMap。
如何在Java中以相反的顺序迭代TreeMap?
可以使用多种方法沿相反的方向迭代TreeMap对象,如下所示。
1.使用Collections类的reverseOrder方法
Collections类的reverseOrder
方法返回一个Comparator,它强加对象的自然顺序。然后,我们可以在TreeMap的构造函数中使用此比较器对象来创建一个按键的相反顺序存储映射的对象。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
import java.util.Collections;
import java.util.TreeMap;
public class TreeMapIterateReverseExample {
public static void main(String[] args) {
/*
* Create TreeMap object that sorts the entries
* using the reverse order
*/
TreeMap<Integer, String> tmapColors = new TreeMap<Integer, String>( Collections.reverseOrder() );
tmapColors.put(1, "Red");
tmapColors.put(2, "Green");
tmapColors.put(3, "Blue");
/*
* TreeMap entries will be automatically sorted in the
* reverse order of the keys
*/
System.out.println("TreeMap contains: " + tmapColors);
}
}
|
输出
1
|
TreeMap contains: {3=Blue, 2=Green, 1=Red}
|
注意:上面给出的方法在TreeMap对象创建时起作用。如果您有未使用reverseOrder
方法创建的现有地图对象,则可以使用以下给定的方法以相反的顺序迭代地图。
2.使用TreeMap类的DescendingKeySet方法
该descendingKeySet
方法返回TreeMap对象中包含的键的相反顺序的Set视图。
1
|
public NavigableSet<K> descendingKeySet()
|
集合视图的迭代器以降序返回TreeMap键。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
TreeMap<Integer, String> tmapColors = new TreeMap<Integer, String>();
tmapColors.put(1, "Red");
tmapColors.put(2, "Green");
tmapColors.put(3, "Blue");
/*
* Use the descendingKeySet method to get a set
* view of keys in descending order
*/
Set<Integer> reverseKeys = tmapColors.descendingKeySet();
/*
* This iterator will return keys in the descending or
* reverse order
*/
Iterator<Integer> iterator = reverseKeys.iterator();
Integer key = null;
while(iterator.hasNext()){
key = iterator.next();
System.out.println( key + "->" + tmapColors.get(key) );
}
|
输出
1
2
3
|
3->Blue
2->Green
1->Red
|
重要的提示:
该descendingKeySet
方法返回的键集 是一个视图,并由原始TreeMap对象支持。您对此视图所做的任何更改都会反映到原始TreeMap对象上,反之亦然。
另外,此设置视图不支持add
和addAll
操作。如果在集合视图上调用add
oraddAll
方法,则代码将引发java.lang.UnsupportedOperationException异常。
3.使用TreeMap类的descendingMap方法
descendingMap
TreeMap类的方法返回一个映射,该映射包含此TreeMap对象中包含的映射的反向视图。
1
|
public NavigableMap<K,V> descendingMap()
|
一旦获得此映射,就可以使用条目集的迭代器遍历条目。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
TreeMap<Integer, String> tmapColors = new TreeMap<Integer, String>();
tmapColors.put(1, "Red");
tmapColors.put(2, "Green");
tmapColors.put(3, "Blue");
/*
* Use the descendingMap method to get a map containing
* reverse view of mapping
*/
Map<Integer, String> reverseMap = tmapColors.descendingMap();
/*
* Get an iterator for all the entries
*/
Iterator<Map.Entry<Integer, String>> iterator = reverseMap.entrySet().iterator();
Map.Entry<Integer, String> entry = null;
while(iterator.hasNext()){
entry = iterator.next();
System.out.println( entry.getKey() + "->" + entry.getValue() );
}
|
输出
1
2
3
|
3->Blue
2->Green
1->Red
|
注意:descendingMap
方法返回的降序地图是一个视图,因此您所做的任何更改都将反映在原始TreeMap中,反之亦然。