国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Java > 正文

Java Map 按key排序和按Value排序的實(shí)現(xiàn)方法

2019-11-26 13:58:29
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

一、理論準(zhǔn)備

Map是鍵值對(duì)的集合接口,它的實(shí)現(xiàn)類(lèi)主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等。

TreeMap:基于紅黑樹(shù)(Red-Black tree)的 NavigableMap 實(shí)現(xiàn),該映射根據(jù)其鍵的自然順序進(jìn)行排序,或者根據(jù)創(chuàng)建映射時(shí)提供的 Comparator 進(jìn)行排序,具體取決于使用的構(gòu)造方法。

HashMap的值是沒(méi)有順序的,它是按照key的HashCode來(lái)實(shí)現(xiàn)的,對(duì)于這個(gè)無(wú)序的HashMap我們要怎么來(lái)實(shí)現(xiàn)排序呢?參照TreeMap的value排序。

Map.Entry返回Collections視圖。

二、key排序

TreeMap默認(rèn)是升序的,如果我們需要改變排序方式,則需要使用比較器:Comparator。Comparator可以對(duì)集合對(duì)象或者數(shù)組進(jìn)行排序的比較器接口,實(shí)現(xiàn)該接口的public compare(T o1,To2)方法即可實(shí)現(xiàn)排序,如下:

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));    }  }}

運(yùn)行結(jié)果如下:

d:aaaaac:bbbbbb:ccccca:ddddd

三、value排序

上面例子是對(duì)根據(jù)TreeMap的key值來(lái)進(jìn)行排序的,但是有時(shí)我們需要根據(jù)TreeMap的value來(lái)進(jìn)行排序。對(duì)value排序我們就需要借助于Collections的sort(List<T> list, Comparator<? super T> c)方法,該方法根據(jù)指定比較器產(chǎn)生的順序?qū)χ付斜磉M(jìn)行排序。但是有一個(gè)前提條件,那就是所有的元素都必須能夠根據(jù)所提供的比較器來(lái)進(jìn)行比較,如下:

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()轉(zhuǎn)換成list    List<Map.Entry<String,String>> list = new ArrayList<Map.Entry<String,String>>(map.entrySet());    //然后通過(guò)比較器來(lái)實(shí)現(xiàn)排序    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());      }   }}

 運(yùn)行結(jié)果如下:

d:aaaaac:bbbbbb:ccccca:ddddd

以上這篇Java Map 按key排序和按Value排序的實(shí)現(xiàn)方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持武林網(wǎng)。

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 敦煌市| 高邮市| 邳州市| 上犹县| 莎车县| 巍山| 鹤岗市| 四川省| 太湖县| 增城市| 尼木县| 盈江县| 理塘县| 江北区| 榆林市| 石屏县| 罗定市| 资源县| 虎林市| 华坪县| 毕节市| 舞阳县| 铁力市| 江安县| 永泰县| 穆棱市| 邵阳市| 承德市| 凤冈县| 伊吾县| 浦县| 那坡县| 蒲江县| 韩城市| 阳高县| 虞城县| 启东市| 定州市| 循化| 梓潼县| 镇赉县|