一、自定义类排序规则
我们都知道TreeMap中使用自定义类型,必须实现Comparable接口或实现一个自定义比较器Comparator
下文将讲述通过外部比较器的方式,使用类按照我们定义的规则排序,如下所示:
// 定义外部比较器comparator:
class descendComparator implements Comparator
{
public int compare(Object o1,Object o2)
{
Integer i1=(Integer)o1;
Integer i2=(Integer)o2;
return -i1.compareTo(i2);
}
}
//TreeMap降序示例
TreeMap<Integer,Integer> map = new TreeMap<Integer,Integer>(new descendComparator());
map.put(8, 7);
map.put(10, 8);
map.put(5, 9);
Set<Integer> keys = map.keySet();
Iterator<Integer> iter = keys.iterator();
while(iter.hasNext())
{
Integer k = iter.next();
System.out.println(" "+k+":"+map.get(a));
}
------运行以上代码,将输出以下信息
10:8
8:7
5:9
二、map遍历方法
方式一:使用entrySet遍历(推荐使用)
遍历方式如下:这里可以选择使用for循环、增强for循环、do-while循环、lamdba表达式等方式对EntrySet实现遍历,这些本质上都是遍历entrySet的不同方式而已,都属于同一种方式遍历,这里只展示使用lamdba的遍历方式。
Set<Map.Entry<String,String>> set = map.entrySet();
set.stream().forEach(entry ->{
System.out.println(entry.getKey()+":"+entry.getValue());
});
方式二:使用keySet遍历
这里也可以选择使用for循环、增强for循环、do-while循环、lamdba表达式等方式对KeySet实现遍历,这些本质上都是遍历keySet的同一种方式遍历,这里只展示使用lamdba的遍历方式。
Set<String> set2 = map.keySet();
set2.stream().forEach(key ->{
System.out.println(key+":"+map.get(key));
});
方式三:使用entrySet+Iterator遍历
这种方式需要使用entrySet方法加上迭代器,代码如下:
Iterator<Map.Entry<String,String>> iterable = map.entrySet().iterator();
while(iterable.hasNext()){
Map.Entry<String,String> entry = iterable.next();
System.out.println(entry.getKey()+":"+entry.getValue());
}
方式四:使用keySet+Iterator遍历
这种方式需要使用keySet方法加上迭代器,代码如下:
Iterator<String> set3 = map.keySet().iterator();
while(set3.hasNext()){
String key = set3.next();
System.out.println(key+":"+map.get(key));
}
方式五:使用keySet、values方法遍历
这种方式是key和value分别遍历的形式,应用场景不多,但也是一种方式,且效率不高,不推荐使用
Set<String> set4 = map.keySet();
set4.stream().forEach(key ->{
System.out.println(key);
});
Collection<String> values = map.values();
values.stream().forEach(value ->{
System.out.println(value);
});
方式六:使用JDK8提供的forEach方法遍历(推荐使用)
forEach方法是JDK8提供的方法,是为了我们方便使用lamdba。这个方法使用lamdba来实现,是非常简洁的。需要传入一个BiConsumer<K,U>,k和u其实就是键和值,我们只需要传入然后操作即可,代码如下:
map.forEach((key,value) ->{
System.out.println(key+":"+value);
});