您好,登錄后才能下訂單哦!
本文小編為大家詳細(xì)介紹“Java中Map接口如何使用”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“Java中Map接口如何使用”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學(xué)習(xí)新知識(shí)吧。
以鍵(key)值(value)對(duì)的形式存儲(chǔ)
鍵無序、無下標(biāo)、元素不可重復(fù)
值無序、無下標(biāo)、元素可以重復(fù)
HashMap
JDK1.2 底層哈希表實(shí)現(xiàn) 線程不安全,效率高
LinkedHashMap
JDK1.2 是HashMap的子類,底層哈希表實(shí)現(xiàn) 線程不安全,效率高
TreeMap
JDK1.2 是SortedMap的實(shí)現(xiàn)類,底層紅黑樹實(shí)現(xiàn) 線程不安全,效率高
HashTable
JDK1.0 底層哈希表實(shí)現(xiàn) 線程安全,效率低
Properties
JDK1.0 是HashTable的子類,底層哈希表實(shí)現(xiàn) 線程安全,效率低
使用多態(tài)
Map<鍵的泛型,值的泛型> 集合名=new 實(shí)現(xiàn)類名<鍵的泛型,值的泛型>();
tips:一個(gè)鍵值對(duì)才是一個(gè)元素
值 put(鍵,值)
:將一個(gè)鍵值對(duì)添加至集合末尾
如果鍵已經(jīng)存在,則進(jìn)行值的替換
void clear()
:清空集合元素
boolean containsKey(鍵)
:判斷集合中是否存在某個(gè)鍵
boolean containsValue(值)
:判斷集合中是否存在某個(gè)值
值 get(鍵)
:獲取鍵對(duì)應(yīng)的值
boolean isEmpty()
:判斷集合內(nèi)容是否為空,不能判比null值
void putAll(Map的集合名)
:將指定Map集合的內(nèi)容添加至當(dāng)前集合末尾
值 remove(鍵)
:移除鍵所對(duì)應(yīng)的鍵值對(duì)
int size()
:獲取集合鍵值對(duì)的個(gè)數(shù)
代碼舉例:
public class Test { public static void main(String[] args) { //數(shù)字-String 1 - 一 1 - yi Map<Integer, String> map = new HashMap<Integer, String>(); map.put(1, "一"); map.put(111, "yiyiyi"); map.put(666, "liuliuliu"); map.put(111, "一一一"); System.out.println(map.containsKey(678));//f System.out.println(map.containsValue("yiyiyi"));//t System.out.println(map.get(111)); map.remove(666); System.out.println(map.get(666)); System.out.println(map.size());//2 }}
1、keySet()+get()
先獲取所有的鍵,再遍歷鍵得到所有的值
Set<鍵的泛型> keySet():獲取所有的鍵存于Set集合并返回
//獲取所有鍵 Set<鍵的泛型> set=集合名.keySet(); //遍歷所有鍵 set.forEach( o-> //o就代表當(dāng)前正在被遍歷的鍵 //通過集合名.get(o)可以得到對(duì)應(yīng)的值 );如: Map<Integer, String> map = new HashMap<>(); map.put(123, "yiersan"); map.put(234, "ersansi"); map.put(456, "siwuliu"); map.put(999, "jiujiujiu"); Set<Integer> set=map.keySet(); set.forEach(o-> System.out.println("鍵:"+o+",值:"+map.get(o)));
2、values()
直接獲取所有的值
Collection<值的泛型> values():獲取所有的值存于Collection集合并返回
Collection<值的泛型> coll = 集合名.values();coll.forEach(v-> v就代表當(dāng)前的值);如: Collection<String> coll = map.values(); coll.forEach(v-> System.out.println(v));
3、entrySet()
獲取鍵值對(duì)對(duì)象進(jìn)行遍歷
Set< Map.Entry<鍵的泛型,值的泛型> > entrySet():獲取所有的鍵值對(duì)對(duì)象存于Set集合并返回
Set< Map.Entry<鍵的泛型,值的泛型> > 等同于 Set<鍵值對(duì)對(duì)象>
getKey():獲取Entry對(duì)象中的鍵
getValue():獲取Entry對(duì)象中的值
//獲取鍵值對(duì)對(duì)象集合 Set<Map.Entry<鍵的泛型,值的泛型>> set2=集合名.entrySet(); for (Map.Entry entry : set2) { //通過entry.getKey()獲取鍵 //通過entry.getValue()獲取值 }如: Set<Map.Entry<鍵的泛型,值的泛型>> set2=集合名.entrySet(); for (Map.Entry entry : set2) { System.out.println("鍵:"+entry.getKey()+",值:"+entry.getValue()) } System.out.println("lambda自遍歷:"); set2.forEach(entry-> System.out.println("鍵:"+entry.getKey()+",值:"+entry.getValue()));
4、自遍歷forEach
JDK8.0
集合名.forEach(new BiConsumer<鍵的泛型, 值的泛型>() { @Override public void accept(鍵的泛型 i, 值的泛型 s) { //i代表鍵 //s代表值 } }); System.out.println("lambda簡(jiǎn)化自遍歷:"); map.forEach((k,v)-> k代表鍵,v代表值);如: map.forEach(new BiConsumer<Integer, String>() { @Override public void accept(Integer i, String s) { System.out.println("鍵:"+i+",值:"+s); } }); System.out.println("lambda簡(jiǎn)化自遍歷:"); map.forEach((k,v)-> System.out.println("鍵:"+k+",值:"+v));
HashMap
可以存放null值,鍵可以存放0-1個(gè)null,值可以存放0-n個(gè)null
LinkedHashMap
可以保證存入取出順序一致
TreeMap
可以根據(jù)鍵進(jìn)行默認(rèn)的升序排序
不能對(duì)null進(jìn)行默認(rèn)排序
如果鍵為自定義類型,則必須設(shè)置排序規(guī)則,方式與TreeSet一致
HashTable
不能存放null值
Properties
鍵和值必須為String類型
創(chuàng)建不建議使用多態(tài)
不能聲明泛型
Set
是一個(gè)只有鍵,沒有值的Map
集合
底層數(shù)組長(zhǎng)度為16
數(shù)組加載因子為75%
,當(dāng)數(shù)組位使用到達(dá)75%時(shí),會(huì)以平衡二叉樹
的方式進(jìn)行數(shù)組擴(kuò)容,擴(kuò)容長(zhǎng)度為原長(zhǎng)度*2
,擴(kuò)容出來的每個(gè)數(shù)組長(zhǎng)度都為16
為什么Set或者M(jìn)ap在存放數(shù)值的時(shí)候,是從小到大的?
當(dāng)存放數(shù)值過小時(shí),整數(shù)值本身就是它的存放下標(biāo),下標(biāo)從小到大,所以值的存放也是從小到大
紅黑樹使用的是二分查找法,特點(diǎn)為查詢效率快
紅黑樹:以哈希碼值為判斷標(biāo)準(zhǔn),哈希碼值比當(dāng)前元素大,往右側(cè)存儲(chǔ),哈希碼值比當(dāng)前元素小,往左側(cè)存儲(chǔ)
二分查找法:特點(diǎn)為一次鎖定數(shù)據(jù)的一半
當(dāng)哈希表的數(shù)組中某個(gè)鏈表長(zhǎng)度達(dá)到了8時(shí),會(huì)重組鏈表元素,開啟紅黑樹
讀到這里,這篇“Java中Map接口如何使用”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識(shí)點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過才能領(lǐng)會(huì),如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。