❶ 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+"微秒");
經過多次運行,結果大概都是這樣的:
keySet遍歷map耗時9867微秒
values遍歷map(只得到值)耗時2539微秒
entrySet遍歷map耗時2783微秒
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集合可以通過哪些方式進行遍歷
方法一 在for-each循環中使用entries來遍歷這是最常見的並且在大多數情況下也是最可取的遍歷方式。在鍵值都需要時使用。Mapmap= new HashMap(); for (Map.Entry entry :map.entrySet()) { System.out.println("Key = " + entry.getKey()
❼ 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,必須使用方法三。
否則使用方法一(鍵值都要)。