今天写了一个程序 需要实现TreeMap<Integer,Stirng>的反向遍历,虽然有很多方法,但是发现treeSet有个
public Iterator<E> descendingIterator()
返回在此 set 元素上按降序进行迭代的迭代器。
指定者:
接口 NavigableSet<E> 中的 descendingIterator
返回:
在此 set 元素上按降序进行迭代的迭代器
从以下版本开始:
1.6
而TreeMap的键就是一个TreeSet集合啊,所以就很好做了。但是我们用keySet()得到的是一个Set集合,descendingIterator()只能由TreeSet调用,所以就要把set转换成TreeSet
以TreeMap<Integer,String>为例(当然其他的TreeMap都可以):
import java.util.Iterator;
import java.util.Set;
import java.util.TreeMap;
import java.util.TreeSet;
public class SetAndTreeSet {
/**
* Wang Yanming
*/
public static void main(String[] args) {
TreeMap<Integer,String> tm = new TreeMap<Integer, String>();
tm.put(1,"中国");
tm.put(2,"首都");
tm.put(3,"北京");
//如何将这三个排序实现输出北京、首都、中国??
Set<Integer> set = tm.keySet();
//我们知道Integer是final类不允许取继承和重写其中方法。
//而 tm.keySet()得到的是Integer类型的集合set,从小到大遍历如:
Iterator<Integer> it = set.iterator();
//while(it.hasNext())
//{
// System.out.println(tm.get(it.next()));//输出的顺序是中国 首都 北京
//}
//如何进行反向输出呢?TreeeSet提供了一个descendingIterator()得到降序迭代器
//但是只有TreeSet可以调用,就需要将Set转化成treeSet了
TreeSet<Integer> ts = new TreeSet<Integer>();
while(it.hasNext())
{
ts.add(it.next());
}
Iterator<Integer> it2 = ts.descendingIterator();
while(it2.hasNext())
{
System.out.println(tm.get(it2.next()));//输出顺序北京 首都 中国
}
}
}
代码讲的很细了。不明白或那位大牛有更好的办法一起讨论吧
这是对于TreeMap而言,但是要是List就好办了,可以利用ListIterator按任意顺序排列