这里有新鲜出炉的Java并发编程示例,程序狗速度看过来!
java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaEE(j2ee), JavaME(j2me), JavaSE(j2se))的总称。
下面小编就为大家带来一篇Java Map 按key排序和按Value排序的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
一、理论准备
Map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等。
TreeMap:基于红黑树(Red-Black tree)的 NavigableMap 实现,该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法。
HashMap的值是没有顺序的,它是按照key的HashCode来实现的,对于这个无序的HashMap我们要怎么来实现排序呢?参照TreeMap的value排序。
Map.Entry返回Collections视图。
二、key排序
TreeMap默认是升序的,如果我们需要改变排序方式,则需要使用比较器:Comparator。Comparator可以对集合对象或者数组进行排序的比较器接口,实现该接口的public compare(T o1,To2)方法即可实现排序,如下:
- import java.util.Comparator;
- import java.util.Iterator;
- import java.util.Map;
- import java.util.Set;
- import java.util.TreeMap;
- public class TreeMapTest {
- public static void main(String[] args) {
- Map < String,
- String > map = new TreeMap < String,
- String > (new Comparator < String > () {
- public int compare(String obj1, String obj2) {
- // 降序排序
- return obj2.compareTo(obj1);
- }
- });
- map.put("b", "ccccc");
- map.put("d", "aaaaa");
- map.put("c", "bbbbb");
- map.put("a", "ddddd");
- Set < String > keySet = map.keySet();
- Iterator < String > iter = keySet.iterator();
- while (iter.hasNext()) {
- String key = iter.next();
- System.out.println(key + ":" + map.get(key));
- }
- }
- }
运行结果如下:
- d:aaaaa
- c:bbbbb
- b:ccccc
- a:ddddd
三、value排序
上面例子是对根据TreeMap的key值来进行排序的,但是有时我们需要根据TreeMap的value来进行排序。对value排序我们就需要借助于Collections的sort(List<T> list, Comparator<? super T> c)方法,该方法根据指定比较器产生的顺序对指定列表进行排序。但是有一个前提条件,那就是所有的元素都必须能够根据所提供的比较器来进行比较,如下:
- import java.util.ArrayList;
- import java.util.Collections;
- import java.util.Comparator;
- import java.util.List;
- import java.util.Map;
- import java.util.Map.Entry;
- import java.util.TreeMap;
- public class TreeMapTest {
- public static void main(String[] args) {
- Map < String,
- String > map = new TreeMap < String,
- String > ();
- map.put("a", "ddddd");
- map.put("c", "bbbbb");
- map.put("d", "aaaaa");
- map.put("b", "ccccc");
- //这里将map.entrySet()转换成list
- List < Map.Entry < String,
- String >> list = new ArrayList < Map.Entry < String,
- String >> (map.entrySet());
- //然后通过比较器来实现排序
- Collections.sort(list, new Comparator < Map.Entry < String, String >> () {
- //升序排序
- public int compare(Entry < String, String > o1, Entry < String, String > o2) {
- return o1.getValue().compareTo(o2.getValue());
- }
- });
- for (Map.Entry < String, String > mapping: list) {
- System.out.println(mapping.getKey() + ":" + mapping.getValue());
- }
- }
- }
运行结果如下:
- d:aaaaa
- c:bbbbb
- b:ccccc
- a:ddddd
以上这篇Java Map 按key排序和按Value排序的实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持PHPERZ。
来源: http://www.phperz.com/article/17/1115/360222.html