Java Map排序 按key和按value

2021-07-08 20:54:07 字數 2157 閱讀 9081

map的排序分為按key排序和按value排序。這裡講講這兩種方法。

借助treemap來按key排序。treemap預設按key進行公升序排序。如果想改變預設的順序,定義乙個comparator即可。

**:

public static void main(string args) 

});map.put(101, "yu");

map.put(21, "th");

map.put(221, "kt");

map.put(1622, "gj");

for (map.entryentry : map.entryset())

}

輸出結果:

1622 gj

221 kt

101 yu

21 th

可見結果按key降序排序了。

treemap主要是針對key進行預設排序的,並沒有針對value的排序。但是有時候我們需要對value進行排序,所以採取的策略是將map變為list,然後利用collections.sort進行排序,同時重寫comparator方法。 

例子:

/**

* 按照value對map排序

* @param map

* @param isasc 是否公升序排序

* @return arraylist 有序儲存著map的元素

*/public static arraylist> sortmapbyvalue2(mapmap,

final boolean isasc)

});return (arraylist>) entries;

}

測試**:

public static void main(string args) 	 

}

執行結果:

:2

歌曲:3

圖書:4

動漫:4

圖示:6

音像:6

影視:7

**:8

素材:9

上面**是針對元素是的map,不適用於或等情況。怎麼辦?再寫幾個針對不同型別的方法?那樣太費勁了,並且**冗餘,不利於維護。有其他好的解決方法嗎?有的,泛型。

泛型讓程式設計人員能夠使用型別抽象,也就是說程式設計的時候不用管資料具體的型別是什麼。

**:

/**

* 按照value對map排序

* @param map

* @param isasc 是否公升序排序

* @return arraylist 有序儲存著map的元素

*/public static> arraylist>

sortmapbyvalue(mapmap,final boolean isasc)

});return (arraylist>) entries;

}

測試**:

public static void main(string args) 

//測試**2

system.out.println("\n測試**2:");

mapmap2 = new hashmap();

map2.put("圖書", "s");

map2.put("音像", "f");

map2.put("素材", "c");

map2.put("**", "e");

map2.put("影視", "d");

arraylist> entries2 = sortmapbyvalue(map2, true);

for (map.entryentry : entries2)

}

執行結果:

測試**1:

:2歌曲:3

圖書:4

動漫:4

圖示:6

音像:6

影視:7

**:8

素材:9

測試**2:

素材:c

影視:d

**:e

音像:f

圖書:s

map按key和按value排序

看乙個題 查詢和排序 題目 輸入任意 使用者,成績 序列,可以獲得成績從高到低或從低到高的排列,相同成績 都按先錄入排列在前的規則處理。例示 jack 70 peter 96 tom 70 smith 67 從高到低 成績 peter 96 jack 70 tom 70 smith 67 從低到高 ...

Map排序(按key排序,按value排序)

主要分兩種,按鍵排序 按值排序。而且,按key排序主要用於treemap,而按value排序則對於map的子類們都適用。按key排序主要用於treemap,可以實現按照key值的大小,在物件插入時直接插入到合適的位置,保持map的順序性。來看treemap的建構函式 treemap comparat...

map 按key排序VS按value排序

最近在pat刷題,其中一道題月餅 25 需要用到對 進行排序,但是排序後要用到 對應的總售價。因而可以考慮用關聯容器進行求解,map是比較合適這題的資料結構。map是用來存放鍵值對的資料結構,可以很方便快速的根據key查到相應的value。關於map的詳細定義及用法可以見c stl之map學習。假如...