在講解map排序之前,我們先來稍微了解下map。map是鍵值對的集合介面,它的實現類主要包括:hashmap,treemap,hashtable以及linkedhashmap等。其中這四者的區別如下(簡單介紹):
1.hashmap:我們最常用的map,它根據key的hashcode 值來儲存資料,根據key可以直接獲取它的value,同時它具有很快的訪問速度。hashmap最多隻允許一條記錄的key值為null(多條會覆蓋);允許多條記錄的value為 null。非同步的。
2.treemap: 能夠把它儲存的記錄根據key排序,預設是按公升序排序,也可以指定排序的比較器,當用iterator 遍歷treemap時,得到的記錄是排過序的。treemap不允許key的值為null。非同步的。
3.hashtable: 與 hashmap類似,不同的是:key和value的值均不允許為null;它支援執行緒的同步,即任一時刻只有乙個執行緒能寫hashtable,因此也導致了hashtale在寫入時會比較慢。
4.linkedhashmap: 儲存了記錄的插入順序,在用iterator遍歷linkedhashmap時,先得到的記錄肯定是先插入的.在遍歷的時候會比hashmap慢。key和value均允許為空,非同步的。
treemap預設是公升序的,如果我們需要改變排序方式,則需要使用比較器:comparator。
public
class
treemaptest})
; map.
put(
"c",
"ccccc");
map.
put(
"a",
"aaaaa");
map.
put(
"b",
"bbbbb");
map.
put(
"d",
"ddddd");
setkeyset = map.
keyset()
; iterator
iter = keyset.
iterator()
;while
(iter.
hasnext()
)}}
上面例子是對根據treemap的key值來進行排序的,但是有時我們需要根據treemap的value來進行排序。對value排序我們就需要借助於collections的sort(list list, comparator<? super t> c)方法,該方法根據指定比較器產生的順序對指定列表進行排序。但是有乙個前提條件,那就是所有的元素都必須能夠根據所提供的比較器來進行比較。如下:
public
class
treemaptest})
;for
(map.entry
}}
我們都是hashmap的值是沒有順序的,他是按照key的hashcode來實現的。對於這個無序的hashmap我們要怎麼來實現排序呢?參照treemap的value排序,我們一樣的也可以實現hashmap的排序。
public
class
hashmaptest})
;for
(map.entry
}}
Map常用集合遍歷
map集合是鍵值對形式儲存值的,所以遍歷map集合無非就是獲取鍵和值,根據實際需求,進行獲取鍵和值 1 無非就是通過map.keyset 獲取到值,然後根據鍵獲取到值 for string s map.keyset 2 通過map.entry string,string 獲取,然後使用entry.g...
C 中 map 的基本操作和巢狀map的使用
c 中map容器提供乙個鍵值對容器,map與multimap差別僅僅在於multiple允許乙個鍵對應多個值。本文主要總結一下map基本用法和巢狀用法示例。一 map基本用法 1 標頭檔案 include 2 定義 mapmy map 注意這裡的int和int可以是其他型別 或者是typedef m...
map容器以及下標操作和insert操作
map中所有元素都是pair pair中的第乙個元素為key 鍵值 起到索引的作用,第二個元素為value 實值 所有元素都會根據原色的鍵值自動排序 本質 map屬於關聯式容器,優點 可以根據key值快速找到value值 和其他容器一樣 1.構造和賦值 2.大小和交換 size empty swap...