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

