Java中Map的entrySet()使用說明
由于Map中存放的元素均為鍵值對,故每一個(gè)鍵值對必然存在一個(gè)映射關(guān)系。
Map中采用Entry內(nèi)部類來表示一個(gè)映射項(xiàng),映射項(xiàng)包含Key和Value
Map.Entry里面包含getKey()和getValue()方法
Set<Entry<T,V>> entrySet()
該方法返回值就是這個(gè)map中各個(gè)鍵值對映射關(guān)系的集合。
可使用它對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ǔ)充知識:Map對象中的keyset()、entryset()和Map.Entry
一 Map對象中的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();
// 有了鍵可以通過map集合的get方法獲取其對應(yīng)的值
String value = map.get(key);
// 獲得key和value值
System.out.println("key:" + key + "-->value:" + value);
}
}
keySet()返回的是map對象的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");
// 通過entrySet()方法將map集合中的映射關(guān)系取出(這個(gè)關(guān)系就是Map.Entry類型)
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)系對象me
Map.Entry<String, String> me = it2.next();
// 通過關(guān)系對像獲取key
String key2 = me.getKey();
// 通過關(guān)系對像獲取value
String value2 = me.getValue();
System.out.println("key:" + key2 + "-->value:" + value2);
}
}
entrySet()返回映射所包含的映射關(guān)系的Set集合(一個(gè)關(guān)系就是一個(gè)鍵-值對),就是把(key-value)作為一個(gè)整體一對一對地存放到Set集合當(dāng)中的。
3.總結(jié)
雖然使用keyset及entryset來進(jìn)行遍歷能取得相同的結(jié)果,但兩者的遍歷速度是有差別的。
keySet():迭代后只能通過get()取key;再根據(jù)key值取value。
entrySet():迭代后可以e.getKey(),e.getValue()取key和value。
同時(shí),keySet()的速度比entrySet()慢了很多,也就是keySet方式遍歷Map的性能不如entrySet性能好
為了提高性能,以后多考慮用entrySet()方式來進(jìn)行遍歷。
二 Map.Entry
Map是java中的接口,Map.Entry是Map的一個(gè)內(nèi)部接口。
Map提供了一些常用方法,如keySet()、entrySet()等方法,keySet()方法返回值是Map中key值的集合;entrySet()的返回值也是返回一個(gè)Set集合,此集合的類型為Map.Entry。
Map.Entry是Map聲明的一個(gè)內(nèi)部接口,此接口為泛型,定義為Entry<K,V>。它表示Map中的一個(gè)實(shí)體(一個(gè)key-value對)。接口中有g(shù)etKey(),getValue方法。
遍歷Map對象的常用方法除了以上兩種外,還有一種是單純的遍歷value值。Map有一個(gè)values方法,返回的是value的Collection集合。通過遍歷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();
// 通過遍歷Collection也可以遍歷value
Iterator<String> it = c.iterator();
// 該方法只能遍歷value值,不能遍歷key值
while (it.hasNext()) {
Object value = it.next();
System.out.println("value:" + value);
}
}
在遍歷Map對象時(shí),先從Map對象中取出key值之后,還必須每次重復(fù)返回到Map中取得相對的值,這是很繁瑣和費(fèi)時(shí)的。
幸運(yùn)的是,Map類提供了一個(gè)稱為entrySet()的方法,這個(gè)方法返回一個(gè)Map.Entry實(shí)例化后的對象集。 接著,Map.Entry類提供了一個(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();
//
}
}
盡管增加了一行代碼,我們卻省略了許多對Map不必要的“get”調(diào)用。同時(shí),提供給開發(fā)人員一個(gè)同時(shí)保持了關(guān)鍵字和其對應(yīng)的值的類。Map.Entry同時(shí)也提供了一個(gè)setValue()方法,程序員可以使用它修改map里面的值。
以上這篇Java中Map的entrySet()使用說明就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
IDEA配置Gradle及Gradle安裝的實(shí)現(xiàn)步驟
本文主要介紹了IDEA配置Gradle及Gradle安裝的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-08-08
springboot多模塊項(xiàng)目mvn打包遇到存在依賴但卻無法發(fā)現(xiàn)符號問題
在SpringBoot多模塊項(xiàng)目中,如果遇到依賴存在但無法發(fā)現(xiàn)符號的問題,常見原因可能是pom.xml配置問題,例如,如果某個(gè)模塊僅作為依賴而不是啟動(dòng)工程,不應(yīng)在其pom中配置spring-boot-maven-plugin插件,因?yàn)檫@將影響jar包的生成方式2024-09-09
Java線程池submit阻塞獲取結(jié)果的實(shí)現(xiàn)原理詳解
Java線程池中提交任務(wù)運(yùn)行,通常使用execute()方法就足夠了。那如果想要實(shí)現(xiàn)在主線程中阻塞獲取線程池任務(wù)運(yùn)行的結(jié)果,該怎么辦呢?本文就來和大家一起討論討論2022-10-10
Java實(shí)現(xiàn)學(xué)生管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)學(xué)生管理系統(tǒng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01
通過實(shí)例解析synchronized和lock區(qū)別
這篇文章主要介紹了通過實(shí)例解析synchronized和lock區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-12-12
Java實(shí)現(xiàn)循環(huán)體的過濾器的方法
這篇文章主要介紹了Java實(shí)現(xiàn)循環(huán)體的過濾器的方法,需要的朋友可以參考下2014-02-02

