常用map的操作和map集合排序

2021-10-16 22:50:57 字數 1646 閱讀 8046

在講解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...