【问题描述】本题的目的是让大家掌握Map遍历的几种方法。
第一种:二次取值,通过Map.keySet遍历key和value
第二种:通过Map.entrySet使用iterator遍历key和value
第三种:通过Map.values()遍历所有的value,但不能遍历key
这道题当时Java老师修改了好多次,我们来看一下一开始的题目要求。一开始的时候Java老师要求需要对Map进行降序排序。如果排序的话,就需要使用Comparator类的compareTo方法。而有这个方法的Map子类就是TreeMap。
当时好多同学说我写错了,其实那并不是写错了,是Lambda表达式的一种写法。大家可以参考下面的文章。
Lambda表达式(1)
Lambda表达式(2)
我们来看一下具体的操作代码
import java.util.Comparator;
import java.util.Map;
import java.util.TreeMap;
public class Test_sort{
public static void main(String[] args) {
//注意:这个Map的定义是从这里开始,到14行结束
//这里使用了public TreeMap(Comparator<? super K> comparator)构造器
Map<String,String>map = new TreeMap<>(new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o2.compareTo(o1);
}
});
map.put("1","Language");
map.put("2","C Language");
map.put("3","Java Language");
System.out.println(map);
}
}
当然如果使用Lambda表达式是更加简洁的,我们可以对map的定义进行如下修改。
//这两种定义的方式都是相同的
Map<String,String>map = new TreeMap<>((o1, o2) -> o2.compareTo(o1));
不难看出上面的操作是对map的键进行排序的,我们也可以对map的值进行排序。但是就需要用到Collections.sort()方法了。
可以参考如下文章:
让你永远不再因Collections.sort()而迷惑(1)
让你永远不再因Collections.sort()而迷惑(2)