導航:首頁 > 方法技巧 > 遍歷集合的三種方法如何遍布map

遍歷集合的三種方法如何遍布map

發布時間:2022-07-31 10:54:57

❶ java Map 怎麼遍歷

java Map 遍歷一般有四種方式

方式一: 這是最常見的並且在大多數情況下也是最可取的遍歷方式。在鍵值都需要時使用。

作為方法一的替代,這個代碼看上去更加干凈;但實際上它相當慢且無效率。

因為從鍵取值是耗時的操作(與方法一相比,在不同的Map實現中該方法慢了20%~200%)。如果安裝了FindBugs,它會做出檢查並警告你關於哪些是低效率的遍歷。所以盡量避免使用。

總結:

如果僅需要鍵(keys)或值(values)使用方法二。

如果所使用的語言版本低於java 5,或是打算在遍歷時刪除entries,必須使用方法三。

否則使用方法一(鍵值都要)。

(1)遍歷集合的三種方法如何遍布map擴展閱讀:

類似的遍歷演算法:

二叉樹的遍歷演算法

1、先(根)序遍歷的遞歸演算法定義:

若二叉樹非空,則依次執行如下操作:

⑴ 訪問根結點;

⑵ 遍歷左子樹;

⑶ 遍歷右子樹。

2、中(根)序遍歷的遞歸演算法定義:

若二叉樹非空,則依次執行如下操作:

⑴遍歷左子樹;

⑵訪問根結點;

⑶遍歷右子樹。

3、後(根)序遍歷得遞歸演算法定義:

若二叉樹非空,則依次執行如下操作:

⑴遍歷左子樹;

⑵遍歷右子樹;

⑶訪問根結點。

❷ java遍歷Map的幾種方法分析

1.先初始化一個map
public class TestMap {
public static Map<Integer, Integer> map = new HashMap<Integer, Integer>();
}
2.keySet values
如果只需要map的key或者value,用map的keySet或values方法無疑是最方便的
// KeySet 獲取key
public void testKeySet() {
for (Integer key : map.keySet()) {
System.out.println(key);
}
}
// values 獲取value
public void testValues() {
for (Integer value : map.values()) {
System.out.println(value);
}
}
3.keySet get(key)
如果需要同時獲取key和value,可以先獲取key,然後再通過map的get(key)獲取value

需要說明的是,該方法不是最優選擇,一般不推薦使用

// keySet get(key) 獲取key and value
public void testKeySetAndGetKey() {
for (Integer key : map.keySet()) {
System.out.println(key + ":" + map.get(key));
}
}
4.entrySet
通過對map entrySet的遍歷,也可以同時拿到key和value,一般情況下,性能上要優於上一種,這一種也是最常用的遍歷方法

// entrySet 獲取key and value
public void testEntry() {
for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
System.out.println(entry.getKey() + ":" + entry.getValue());
}
}
5.Iterator
對於上面的幾種foreach都可以用Iterator代替,其實foreach在java5中才被支持,foreach的寫法看起來更簡潔

但Iterator也有其優勢:在用foreach遍歷map時,如果改變其大小,會報錯,但如果只是刪除元素,可以使用Iterator的remove方法刪除元素

// Iterator entrySet 獲取key and value
public void testIterator() {
Iterator<Map.Entry<Integer, Integer>> it = map.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<Integer, Integer> entry = it.next();
System.out.println(entry.getKey() + ":" + entry.getValue());
// it.remove(); 刪除元素
}
}

❸ java中,怎麼在jsp頁面遍歷map集合

java中在jsp上遍歷map的方法是利用jstl標簽。
利用el表達式 + jstl標簽:
1> 引入jstl核心標簽庫:
<%@ taglib prefix="c" uri="<a href="http://java.sun.com/jsp/jstl/core" %>" target="_blank">http://java.sun.com/jsp/jstl/core" %></a>

2> 利用foreach遍歷map:
<c:forEach items="${map}" var="m">

${m.key} --> ${m.value}

</c:forEach>

❹ 哪種Map遍歷方法更優

我們都知道遍歷Map一般有3種方法,values(),keySet()和entrySet(),

常見的是keySet用的多,簡單容易理解,entrySet()是返回Map中的靜態內部類Entry類類型的Set實例,當然了你別說forEach,forEach只是一種代替for(inti=0;;)和while()遍歷的一種方式,底層也是用迭代器實現的,只不過把部分東西隱藏了,建議大家平常開發中能用forEach遍歷,盡可能的用這個,《Effectivejava》中也明確表示了,簡單而不容易出錯。


如果Map中有大量的元素,而且並發量又很高,這就涉及到採用哪種遍歷方法的問題,下面就來測試一下:

Map<String,String>mapTest=newHashMap<String,String>();
for(inti=0;i<10000;i++){
mapTest.put(String.valueOf(i),String.valueOf(i));
}


//一種遍歷,keySet()方法

longstart=System.nanoTime();
Set<String>setEach=mapTest.keySet();
for(Stringkey:setEach){
Stringvalue=mapTest.get(key);
}
longend=System.nanoTime();
System.out.println("keySet遍歷map耗時"+(end-start)/1000+"微秒");



//二種遍歷,可用values()返回Collection<T>,不容易得到對應的key

start=System.nanoTime();
Collection<String>co=mapTest.values();
for(Stringvalue:co){
//遍歷中也在創建value
}
end=System.nanoTime();
System.out.println("values遍歷map(只得到值)耗時"+(end-start)/1000+"微秒");


//三種遍歷,用entrySet()方法返回Set<Map.Entry<T,T>>類型,再獲取里邊的Map.Entry


start=System.nanoTime();
Set<Map.Entry<String,String>>entrySet=mapTest.entrySet();
for(Map.Entry<String,String>entry:entrySet){
Stringkey=entry.getKey();
Stringvalue=entry.getValue();
}
end=System.nanoTime();
System.out.println("entrySet遍歷map耗時"+(end-start)/1000+"微秒");


經過多次運行,結果大概都是這樣的:

values()是返回Map的所有value的集合collection,只能遍歷到值,很難遍歷到key所以一般不用,除非在某種特殊場合,所以一般採用的第一種和第三種方式。而測試表明entrySet()方式遍歷效率更高。


entrySet()方式遍歷之所以快於keySet(),一個原因是keySet相當與遍歷了2次,

一次是對key的Set集合的遍歷,二次是每次遍歷過程都要通過key和map.get(key)來獲取value值。

第二個原因是map.get(key)獲取的時候,底層其實根據key的hashcode值經過哈希演算法得到一個hash值然後作為索引映射到對應table數組的索引位置,這是一次密集型計算,很耗費CPU,如果有大量的元素,則會使CPU使用率飆升,影響響應速度,而entrySet()返回的set里邊元素都是Map.Entry類型,key和value就是這個類的一個屬性,entry.getKey()和entry.getValue()效率肯定很高。


所以平常開發過程中,如果對Map講究效率的遍歷的話,還是採用entrySet()方法。

❺ java實現遍歷哈希映射表map的方法匯總

方法/步驟
1、JDK,開發必須的環境
2、IDE,還是推薦Eclipse,如果你的電腦夠快,可以安裝Idea,用過一次,太吃內存,就被拋棄了,但是很多同行都在推薦,聽說很好。
現在開始進入今天的正題,使用Java代碼遍歷Map集合的方法匯總。
1、創建一個Java類,命名為MapTest
2、創建一個Map集合,並定義類型和put值:

3、循環遍歷Map集合的第一種方法,代碼如下:
/**
* 第一種
* foreach循環進行遍歷
* 遍歷的是key值,然後通過get(key)或者值
* key和keyset
*/
private static void firstMethod(HashMap<Integer, String> map){
System.out.println("foreach循環進行遍歷");
for (Integer key : map.keySet()) {
System.out.println("key:"+key+"對應的值為:"+map.get(key));
}
}

4、通過Iterator遍歷Map集合的第二種方法獲取,代碼如下:
/**
* 第二種
* 通過Iterator遍歷獲取
* 和List的遍歷原理相同
*/
public static void secondMethod(HashMap<Integer, String> map){
System.out.println("通過Iterator遍歷獲取");
Iterator<Entry<Integer, String>> inte = map.entrySet().iterator();
while(inte.hasNext()){
Map.Entry<Integer, String> m = inte.next();
System.out.println("key:"+m.getKey()+"對應的值為:"+m.getValue());
}
}

5、通過map方法map.entrySet()遍歷獲取值的第三種方法,代碼如下:
/**
* 第三種,通過map方法map.entrySet()遍歷獲取值
*/
public static void thirdMethod(HashMap<Integer, String> map){
System.out.println("第三種方式:entry");
for (Entry<Integer, String> str : map.entrySet()) {
System.out.println("key:"+str.getKey()+"對應的值為:"+str.getValue());
}
}

6、通過for循環,map.values()循環遍歷獲取值的第四種方法,代碼如下:
這種方法是直接獲取值,不獲取key值:
/**
* 第四種,通過for循環,map.values()循環遍歷獲取值 直接獲取值
*/
public static void fourthMethod(HashMap<Integer, String> map) {
System.out.println("通過map.values()循環遍歷直接獲取值");
for (String string : map.values()) {
System.out.println("map的值為:" + string);
}
}

7
7、不管是遍歷Map還是List的,其本質都是獲取對應的值,程序員在開發中可以根據開發場景適當的選擇各種方法,但是理解其本質才是最主要的。

❻ map集合可以通過哪些方式進行遍歷

❼ java中map的常用遍歷方法

方法一 在for-each循環中使用entries來遍歷

這是最常見的並且在大多數情況下也是最可取的遍歷方式。在鍵值都需要時使用。

Map<Integer, Integer> map = new HashMap<Integer, Integer>();

for (Map.Entry<Integer, Integer> entry : map.entrySet()) {

System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());

}

注意:for-each循環在java 5中被引入所以該方法只能應用於java 5或更高的版本中。如果你遍歷的是一個空的map對象,for-each循環將拋出NullPointerException,因此在遍歷前你總是應該檢查空引用。

方法二 在for-each循環中遍歷keys或values。

如果只需要map中的鍵或者值,你可以通過keySet或values來實現遍歷,而不是用entrySet。

Map<Integer, Integer> map = new HashMap<Integer, Integer>();

//遍歷map中的鍵

for (Integer key : map.keySet()) {

System.out.println("Key = " + key);

}

//遍歷map中的值

for (Integer value : map.values()) {

System.out.println("Value = " + value);

}

該方法比entrySet遍歷在性能上稍好

方法三使用Iterator遍歷

使用泛型:

Map<Integer, Integer> map = new HashMap<Integer, Integer>();

Iterator<Map.Entry<Integer, Integer>> entries = map.entrySet().iterator();

while (entries.hasNext()) {

Map.Entry<Integer, Integer> entry = entries.next();

System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());

}

不使用泛型:

Map map = new HashMap();

Iterator entries = map.entrySet().iterator();

while (entries.hasNext()) {

Map.Entry entry = (Map.Entry) entries.next();

Integer key = (Integer)entry.getKey();

Integer value = (Integer)entry.getValue();

System.out.println("Key = " + key + ", Value = " + value);

}

方法四、通過鍵找值遍歷(效率低)

Map<Integer, Integer> map = new HashMap<Integer, Integer>();

for (Integer key : map.keySet()) {

Integer value = map.get(key);

System.out.println("Key = " + key + ", Value = " + value);

}

總結

如果僅需要鍵(keys)或值(values)使用方法二。

如果你使用的語言版本低於java 5,或是打算在遍歷時刪除entries,必須使用方法三。

否則使用方法一(鍵值都要)。

閱讀全文

與遍歷集合的三種方法如何遍布map相關的資料

熱點內容
如何在初中時學習好的方法 瀏覽:448
硅化木的鑒別方法 瀏覽:252
無創呼吸機的使用方法 瀏覽:859
香葯炮製作方法視頻 瀏覽:432
數據沖突的四種解決方法 瀏覽:554
帕金森的治療方法和注意事項 瀏覽:419
色素胎記治療方法 瀏覽:230
50歲治療白發的方法 瀏覽:301
男士怎麼能瘦下來的方法 瀏覽:734
信息系統需求分析方法 瀏覽:139
用項目管理的方法分析電影 瀏覽:870
霧化葯圖片使用方法w 瀏覽:467
地腳螺栓簡易安裝方法 瀏覽:248
cnmr是什麼檢測方法 瀏覽:229
目前發達國家治癌方法是哪些 瀏覽:817
如何控制類風濕方法 瀏覽:922
葡萄量筒測量方法 瀏覽:995
統計研究運用各種方法 瀏覽:283
尋找研究生碩士老師的方法 瀏覽:704
蘋果平板按鍵音在哪裡設置方法 瀏覽:379