主要分兩種,按鍵排序、按值排序。 而且,按key排序主要用於treemap,而按value排序則對於map的子類們都適用。
按key排序主要用於treemap,可以實現按照key值的大小,在物件插入時直接插入到合適的位置,保持map的順序性。
來看treemap的建構函式:treemap(comparator
<? super k
> comparator):構造乙個新的、空的樹對映,該對映根據給定比較器進行排序。
這裡的比較器是key的比較器。所以定義比較器時用於比較的兩個引數是key的資料型別的物件。
例項**如下:
publicclass
mapsorttest
}}//定義key的比較器,比較演算法根據第乙個引數o1,小於、等於或者大於o2分別返回負整數、0或者正整數,來決定二者存放的先後位置:返回負數則o1在前,正數則o2在前。
class
mycomparator
implements
comparator
}
與按值排序只使用treemap不同,按值排序由於其方法所用到的型別的統一性,所以能用於map的所有子類。
主要用到的知識點有;
1:map.entryset()將map裡的每乙個鍵值對取出來封裝成乙個entry物件並存放到乙個set裡面。
2:泛型map.entry 因為key-value對組成entry物件,此處指明entry物件中這兩個成員的資料型別。
3:collections.sort(listlist, comparator<? super t> c) 集合類的排序方法,通過自定義的比較器進行排序。這裡的list存放的物件是entry物件。定義比較器對entry物件中的value屬性進行比較。
例項**如下:
publicclass
mapsorttest
}}
//自定義entry物件的比較器。每個entry物件可通過getkey()、getvalue()獲得key或value用於比較。換言之:我們也可以通過entry物件實現按key排序。
class
mycomparator
implements comparator
}
map 按key排序VS按value排序
最近在pat刷題,其中一道題月餅 25 需要用到對 進行排序,但是排序後要用到 對應的總售價。因而可以考慮用關聯容器進行求解,map是比較合適這題的資料結構。map是用來存放鍵值對的資料結構,可以很方便快速的根據key查到相應的value。關於map的詳細定義及用法可以見c stl之map學習。假如...
map按key和按value排序
看乙個題 查詢和排序 題目 輸入任意 使用者,成績 序列,可以獲得成績從高到低或從低到高的排列,相同成績 都按先錄入排列在前的規則處理。例示 jack 70 peter 96 tom 70 smith 67 從高到低 成績 peter 96 jack 70 tom 70 smith 67 從低到高 ...
map按key和value排序
map集合按照key和value排序 按value排序 利用集合中的entry封裝,然後利用內部函式描述比較過程,這裡有兩種方式,可以發現其中的o1和o2表示map中的值,o1其實是偏大的那乙個,然後返回的時候其實是將較大的放在後面。mapmap new treemap map.put b 1 ma...