Java中Map集合中的Entry對象用法
Entry: 鍵值對 對象。
在Map類設(shè)計(jì)是,提供了一個(gè)嵌套接口(static修飾的接口):Entry。Entry將鍵值對的對應(yīng)關(guān)系封裝成了對象,即鍵值對對象,這樣我們在遍歷Map集合時(shí),就可以從每一個(gè)鍵值對(Entry)對象中獲取對應(yīng)的鍵與對應(yīng)的值。
Entry為什么是靜態(tài)的?
Entry是Map接口中提供的一個(gè)靜態(tài)內(nèi)部嵌套接口,修飾為靜態(tài)可以通過類名調(diào)用。
Map集合遍歷鍵值對的方式:
Set<Map.Entry<K,V>> entrySet();
//返回此映射中包含的映射關(guān)系的Set視圖
該方法返回值是Set集合,里面裝的是Entry接口類型,即將映射關(guān)系裝入Set集合。
實(shí)現(xiàn)步驟:
1,調(diào)用Map集合中的entrySet()方法,將集合中的映射關(guān)系對象存儲(chǔ)到Set集合中
2,迭代Set集合
3,獲取Set集合的元素,是映射關(guān)系的對象
4,通過映射關(guān)系對象的方法,getKey()和getValue(),獲取鍵值對
補(bǔ)充知識:【JAVA】Map集合(映射集合)、鍵值對的概念&集合對象的取和放
Map集合
Map集合的作用就是為了快速查找,他里面的集合我們就可以理解為哈希表,且哈希表存東西最好使用鍵和值。這里要注意的是,Map集合和Collection集合是并列的關(guān)系,不存在繼承關(guān)系。
注:哈希表就是稀疏數(shù)組,因?yàn)樗m然是數(shù)組,但并不是每個(gè)索引都用上了,即位置沒有存滿,浪費(fèi)了許多空間。
鍵值對
Map存儲(chǔ)時(shí)一般都需要兩個(gè)東西,我們把哈希表里的每個(gè)東西叫做Entry對象,另外表外有一個(gè)Entry接口。這個(gè)接口里定義了兩個(gè)方法——key(鍵)和value(值)。
為什么是分為鍵和值兩部分呢?
因?yàn)椋覀兡面I的哈希碼來計(jì)算我們所要存儲(chǔ)的索引,查找也一樣通過鍵來查找。鍵也是對象,每個(gè)對象都有一個(gè)HasCode。且HasCode主要是用來計(jì)算數(shù)組的索引的。而且用鍵值對查找,其查找速度非???。
但是,這里要注意的是,有的時(shí)候,我們拿值去保存哈希碼的話,可能不是太好。我們希望去找特定的數(shù)據(jù)類型,專門拿某種類型來計(jì)算哈希碼。
將對象放進(jìn)集合
集合先將鍵和值封裝成Entry,然后根據(jù)鍵算出哈希碼的索引,然后將計(jì)算好的Entry對象放到計(jì)算出來的那個(gè)索引的位置上。
Map m = new HashMap(); m.put("abc", new Student(2000, "孫悟空", 'm')); m.put("bcd", new Student(2001, "牛魔王",'m')); m.put("cde", new Student(1999, "紫霞仙子", 'f'));
將集合中的對象取出
通過鍵所封裝的對象的索引位置,來取出Entry對象。但是,最終返回的是值,而不是Entry對象。
Map m = new HashMap(); m.put("abc", new Student(2000, "孫悟空", 'm')); m.put("bcd", new Student(2001, "牛魔王",'m')); m.put("cde", new Student(1999, "紫霞仙子", 'f')); System.out.println(m.get("abc"));
哈希碼
這里的哈希碼是從Object繼承下來的,但是不見子類就合適,因?yàn)镺bject繼承下來的哈希碼是用地址算的,所以值特別大。如果要往哈希表里面放,那么浪費(fèi)空間就比較大,所以子類一般會(huì)重寫。
通過鍵取Entry對象
返回Entry對象的方法只有一個(gè)entrySet方法,而entrySet返回的一定是Set。即它將Entry封裝成了Set集合,我們這里返回的是Entry接口的集合。
System.out.println(m.get("abc")); Set s = m.entrySet(); //迭代Set Iterator iter = s.iterator(); //判斷 while (iter.hasNext()) { Map.Entry entry=(Map.Entry)iter.next(); System.out.println(entry.getKey()+":"+entry.getValue()); }
遍歷所有的值
//這里不能用Set,因?yàn)镾et是個(gè)無序集, //且不能重復(fù),但是,哈希表里的值可以重復(fù)。 //所以,應(yīng)該用Collection來引用,不敢用Set。 //values返回的是Collection, //且不能返回Set,因?yàn)檫@樣會(huì)將值給去掉, //且值有可能是重復(fù)的。 //鍵也不能重復(fù),鍵也返回的是Set。 Collection c=m.values(); Iterator it=c.iterator(); while(it.hasNext()){ System.out.println(it.next()); }
拿到所有的鍵
/** * 拿到所有的鍵 */ Set ss=m.keySet(); Iterator iter1=ss.iterator(); while(iter1.hasNext()){ System.out.println(iter1.next()); }
以上這篇Java中Map集合中的Entry對象用法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Struts2動(dòng)態(tài)結(jié)果集代碼示例
這篇文章主要介紹了Struts2動(dòng)態(tài)結(jié)果集的有關(guān)內(nèi)容,涉及具體代碼示例,具有一定參考價(jià)值,需要的朋友可以了解下。2017-09-09Springboot集成jsp及部署服務(wù)器實(shí)現(xiàn)原理
這篇文章主要介紹了Springboot集成jsp及部署服務(wù)器實(shí)現(xiàn)原理,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08Java實(shí)現(xiàn)FTP批量大文件上傳下載篇1
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)FTP批量大文件上傳下載的基礎(chǔ)篇,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-08-08mybatis新增到數(shù)據(jù)庫后返回當(dāng)前ID問題
這篇文章主要介紹了mybatis新增到數(shù)據(jù)庫后返回當(dāng)前ID問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08