map主要用於儲存健值對,根據鍵得到值,因此不允許鍵重複(重複了覆蓋了),但允許值重複。
hashmap 是乙個最常用的map,它根據鍵的hashcode 值儲存資料,根據鍵可以直接獲取它的值,具有很快的訪問速度,遍歷時,取得資料的順序是完全隨機的。hashmap最多隻允許一條記錄的鍵為null;允許多條記錄的值為 null;hashmap不支援執行緒的同步,即任一時刻可以有多個執行緒同時寫hashmap;可能會導致資料的不一致。如果需要同步,可以用 collections的synchronizedmap方法使hashmap具有同步的能力,或者使用concurrenthashmap。
hashtable與 hashmap類似,它繼承自dictionary類,不同的是:它不允許記錄的鍵或者值為空;它支援執行緒的同步,即任一時刻只有乙個執行緒能寫hashtable,因此也導致了 hashtable在寫入時會比較慢;本身是執行緒安全的,一般考慮登陸的候用hashtable。
linkedhashmap儲存了記錄的插入順序,在用iterator遍歷linkedhashmap時,先得到的記錄肯定是先插入的.也可以在構造時用帶引數,按照應用次數排序。在遍歷的時候會比hashmap慢,不過有種情況例外,當hashmap容量很大,實際資料較少時,遍歷起來可能會比linkedhashmap慢,因為linkedhashmap的遍歷速度只和實際資料有關,和容量無關,而hashmap的遍歷速度和他的容量有關。
treemap實現sortmap介面,能夠把它儲存的記錄根據鍵排序,預設是按鍵值的公升序排序,也可以指定排序的比較器,當用iterator 遍歷treemap時,得到的記錄是排過序的。
一般情況下,我們用的最多的是hashmap,hashmap裡面存入的鍵值對在取出的時候是隨機的,它根據鍵的hashcode值儲存資料,根據鍵可以直接獲取它的值,具有很快的訪問速度。在map 中插入、刪除和定位元素,hashmap 是最好的選擇。
treemap取出來的是排序後的鍵值對。但如果您要按自然順序或自定義順序遍歷鍵,那麼treemap會更好。
linkedhashmap 是hashmap的乙個子類,如果需要輸出的順序和輸入的相同,那麼用linkedhashmap可以實現,它還可以按讀取順序來排列,像連線池中可以應用。
1. hashset是通過hashmap實現的,treeset是通過treemap實現的,只不過set用的只是map的key
2. map的key和set都有乙個共同的特性就是集合的唯一性.treemap更是多了乙個排序的功能.
3. hashcode和equal()是hashmap用的, 因為無需排序所以只需要關注定位和唯一性即可.
a. hashcode是用來計算hash值的,hash值是用來確定hash表索引的.
b. hash表中的乙個索引處存放的是一張鍊錶, 所以還要通過equal方法迴圈比較鏈上的每乙個物件才可以真正定位到鍵值對應的entry.
c. put時,如果hash表中沒定位到,就在鍊錶前加乙個entry,如果定位到了,則更換entry中的value,並返回舊value
4. 由於treemap需要排序,所以需要乙個comparator為鍵值進行大小比較.當然也是用comparator定位的.
a. comparator可以在建立treemap時指定
b. 如果建立時沒有確定,那麼就會使用key.compareto()方法,這就要求key必須實現comparable介面.
c. treemap是使用tree資料結構實現的,所以使用compare介面就可以完成定位了.
注意:
1、collection沒有get()方法來取得某個元素。只能通過iterator()遍歷元素。
2、set和collection擁有一模一樣的介面。
3、list,可以通過get()方法來一次取出乙個元素。使用數字來選擇一堆物件中的乙個,get(0)...(add/get)
4、一般使用arraylist。用linkedlist構造堆疊stack、佇列queue。
5、map用 put(k,v) / get(k),還可以使用containskey()/containsvalue()來檢查其中是否含有某個key/value。
hashmap會利用物件的hashcode來快速找到key。
* hashing
雜湊碼就是將物件的資訊經過一些轉變形成乙個獨一無二的int值,這個值儲存在乙個array中。
我們都知道所有儲存結構中,array查詢速度是最快的。所以,可以加速查詢。
發生碰撞時,讓array指向多個values。即,陣列每個位置上又生成乙個槤表。
6、map中元素,可以將key序列、value序列單獨抽取出來。
使用keyset()抽取key序列,將map中的所有keys生成乙個set。
使用values()抽取value序列,將map中的所有values生成乙個collection。
為什麼乙個生成set,乙個生成collection?那是因為,key總是獨一無二的,value允許重複。
Map集合相關知識
1 map集合 map集合區別於collection集合,是它是以鍵值對 key value 儲存資料。可以儲存一對物件,即可以儲存兩個物件,而且這兩個物件是key value結構的,就是這個兩個物件是有對映關係的。這種結構的最大的好處,就是可以根據key找到關聯的value值。map介面的定義 p...
map的相關知識
map的本質是對雜湊表的引用 map中元素的迭代順序是不固定的 不同的實現方法會使用不同的雜湊演算法,得到不同的元素順序 map的建立與宣告。鍵的型別k必須是可以通過 來進行比較的 ages1 make map string int ages1 vila 22 ages1 anny 21 ages2...
map的相關知識
今天刷到一道leetcode題,題目是這樣的 題目大概意思就是找出具有相同的字母,但是字母之間的順序是不同的單詞,一開始我是設想設定乙個雜湊表,利用字母對映來記錄單詞中每個字母出現的次數,但是後面將字母異位詞放在一起不能實現,參 使用了map函式,發現自己對這一知識不懂,於是學習一下 參考這篇文章m...