Java中Map的entrySet()使用說(shuō)明
由于Map中存放的元素均為鍵值對(duì),故每一個(gè)鍵值對(duì)必然存在一個(gè)映射關(guān)系。
Map中采用Entry內(nèi)部類(lèi)來(lái)表示一個(gè)映射項(xiàng),映射項(xiàng)包含Key和Value
Map.Entry里面包含getKey()和getValue()方法
Set<Entry<T,V>> entrySet()
該方法返回值就是這個(gè)map中各個(gè)鍵值對(duì)映射關(guān)系的集合。
可使用它對(duì)map進(jìn)行遍歷。
Iterator<Map.Entry<Integer, Integer>> it=map.entrySet().iterator(); while(it.hasNext()) { Map.Entry<Integer,Integer> entry=it.next(); int key=entry.getKey(); int value=entry.getValue(); System.out.println(key+" "+value); }
補(bǔ)充知識(shí):Map對(duì)象中的keyset()、entryset()和Map.Entry
一 Map對(duì)象中的keySet()和entrySet()
1. keySet()
public static void main(String[] args) { Map<String, String> map = new HashMap<String, String>(); map.put("01", "qwe"); map.put("02", "asd"); map.put("03", "zxc"); // 先獲取map集合的所有鍵的set集合,即為map中所有key值得集合 Set<String> keySet = map.keySet(); // 有了set集合,就可以獲取其迭代器 Iterator<String> it = keySet.iterator(); while (it.hasNext()) { String key = it.next(); // 有了鍵可以通過(guò)map集合的get方法獲取其對(duì)應(yīng)的值 String value = map.get(key); // 獲得key和value值 System.out.println("key:" + key + "-->value:" + value); } }
keySet()返回的是map對(duì)象的key值的set集合
2. entrySet()
public static void main(String[] args) { Map<String, String> map = new HashMap<String, String>(); map.put("01", "qwe"); map.put("02", "asd"); map.put("03", "zxc"); // 通過(guò)entrySet()方法將map集合中的映射關(guān)系取出(這個(gè)關(guān)系就是Map.Entry類(lèi)型) Set<Map.Entry<String, String>> entrySet = map.entrySet(); // 將關(guān)系集合entryset進(jìn)行迭代,存放到迭代器中 Iterator<Map.Entry<String, String>> it2 = entrySet.iterator(); while (it2.hasNext()) { // 獲取Map.Entry關(guān)系對(duì)象me Map.Entry<String, String> me = it2.next(); // 通過(guò)關(guān)系對(duì)像獲取key String key2 = me.getKey(); // 通過(guò)關(guān)系對(duì)像獲取value String value2 = me.getValue(); System.out.println("key:" + key2 + "-->value:" + value2); } }
entrySet()返回映射所包含的映射關(guān)系的Set集合(一個(gè)關(guān)系就是一個(gè)鍵-值對(duì)),就是把(key-value)作為一個(gè)整體一對(duì)一對(duì)地存放到Set集合當(dāng)中的。
3.總結(jié)
雖然使用keyset及entryset來(lái)進(jìn)行遍歷能取得相同的結(jié)果,但兩者的遍歷速度是有差別的。
keySet():迭代后只能通過(guò)get()取key;再根據(jù)key值取value。
entrySet():迭代后可以e.getKey(),e.getValue()取key和value。
同時(shí),keySet()的速度比entrySet()慢了很多,也就是keySet方式遍歷Map的性能不如entrySet性能好
為了提高性能,以后多考慮用entrySet()方式來(lái)進(jìn)行遍歷。
二 Map.Entry
Map是java中的接口,Map.Entry是Map的一個(gè)內(nèi)部接口。
Map提供了一些常用方法,如keySet()、entrySet()等方法,keySet()方法返回值是Map中key值的集合;entrySet()的返回值也是返回一個(gè)Set集合,此集合的類(lèi)型為Map.Entry。
Map.Entry是Map聲明的一個(gè)內(nèi)部接口,此接口為泛型,定義為Entry<K,V>。它表示Map中的一個(gè)實(shí)體(一個(gè)key-value對(duì))。接口中有g(shù)etKey(),getValue方法。
遍歷Map對(duì)象的常用方法除了以上兩種外,還有一種是單純的遍歷value值。Map有一個(gè)values方法,返回的是value的Collection集合。通過(guò)遍歷Collection也可以遍歷value。
public static void main(String[] args) { Map<String, String> map = new HashMap<String, String>(); map.put("01", "qwe"); map.put("02", "asd"); map.put("03", "zxc"); // 創(chuàng)建一個(gè)Collection集合,存放map的value值 Collection<String> c = map.values(); // 通過(guò)遍歷Collection也可以遍歷value Iterator<String> it = c.iterator(); // 該方法只能遍歷value值,不能遍歷key值 while (it.hasNext()) { Object value = it.next(); System.out.println("value:" + value); } }
在遍歷Map對(duì)象時(shí),先從Map對(duì)象中取出key值之后,還必須每次重復(fù)返回到Map中取得相對(duì)的值,這是很繁瑣和費(fèi)時(shí)的。
幸運(yùn)的是,Map類(lèi)提供了一個(gè)稱為entrySet()的方法,這個(gè)方法返回一個(gè)Map.Entry實(shí)例化后的對(duì)象集。 接著,Map.Entry類(lèi)提供了一個(gè)getKey()方法和一個(gè)getValue()方法。
Set entries = map.entrySet( ); if(entries != null) { Iterator iterator = entries.iterator( ); while(iterator.hasNext( )) { Map.Entry entry =iterator.next( ); Object key = entry.getKey( ); Object value = entry.getValue(); // } }
盡管增加了一行代碼,我們卻省略了許多對(duì)Map不必要的“get”調(diào)用。同時(shí),提供給開(kāi)發(fā)人員一個(gè)同時(shí)保持了關(guān)鍵字和其對(duì)應(yīng)的值的類(lèi)。Map.Entry同時(shí)也提供了一個(gè)setValue()方法,程序員可以使用它修改map里面的值。
以上這篇Java中Map的entrySet()使用說(shuō)明就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Mybatis分頁(yè)P(yáng)ageHelper插件代碼實(shí)例
這篇文章主要介紹了Mybatis分頁(yè)P(yáng)ageHelper插件代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-12-12myBatis使用@GeneratedValue(generator?=?“...“,?strategy?=?
這篇文章主要介紹了myBatis使用@GeneratedValue(generator?=?“...“,?strategy?=?...)注解問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07Java編程實(shí)現(xiàn)數(shù)組轉(zhuǎn)成list及l(fā)ist轉(zhuǎn)數(shù)組的方法
這篇文章主要介紹了Java編程實(shí)現(xiàn)數(shù)組轉(zhuǎn)成list及l(fā)ist轉(zhuǎn)數(shù)組的方法,結(jié)合實(shí)例形式較為詳細(xì)的總結(jié)分析了java實(shí)現(xiàn)數(shù)組與list之間相互轉(zhuǎn)換的操作技巧,需要的朋友可以參考下2017-09-09超詳細(xì)講解Java秒殺項(xiàng)目登陸模塊的實(shí)現(xiàn)
這是一個(gè)主要使用java開(kāi)發(fā)的秒殺系統(tǒng),項(xiàng)目比較大,所以本篇只實(shí)現(xiàn)了登陸模塊,代碼非常詳盡,感興趣的朋友快來(lái)看看2022-03-03Java之Rsync并發(fā)遷移數(shù)據(jù)并校驗(yàn)詳解
這篇文章主要介紹了Java之Rsync并發(fā)遷移數(shù)據(jù)并校驗(yàn)詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08