keyset與entryset的比較:
Map<String,String> map=new HashMap<String, String>();
map.put("1","a");
map.put("2","b");
map.put("3","c");
map.put("4","d");
map.put("5","e");
map.put("6","f");
map.put("7","g");
map.put("8","h");
map.put("9","j");
Set<String> ls=map.keySet();//這裡是生成鍵的視圖 如果要讀取還必須get一次
for(String l:ls)
System.out.println("k="+l+" v="+map.get(l));
Set<Map.Entry<String, String>> lv=map.entrySet();//這裡是生成鍵和映射關系的視圖 不需要再get一次。是以效率明顯快
for(Map.Entry<String, String> l:lv)
System.out.println(l.getKey()+"-----"+l.getValue());
}
關于Java集合的Map集合的周遊
普通Java代碼:
map.keySet();鍵集合
map.values();值集合
map.entrySet();鍵值集合
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class MapTest {
public static void main(String[] args) {
Map map=new HashMap();
map.put("a","1");
map.put("b","2");
map.put("c","3");
//for循環方式——周遊鍵,通過鍵取值
//map.keySet();鍵集合
//map.values();值集合
//map.entrySet();鍵值集合
//最常用的方法
Set set = map.keySet();
for(Object key : set){
System.out.println("鍵:" + key +" 值:" + map.get(key));
}
System.out.println("--------------");
it.hasNext()分為兩個:it 和 .hasNext();
1. it:這裡應該是上文定義了一個可疊代對象
2. .hasNext(): 檢查序列中是否還有元素
3. 其他Iterator用法。
1)使用方法 iterator()要求容器傳回一個 Iterator。第一次調用Iterator 的next()方法時,它傳回序列的第一個元素。
2)使用next()獲得序列中的下一個元素。
3)使用hasNext()檢查序列中是否還有元素。
4)使用remove()将上一次傳回的元素從疊代器中移除。
//Iterator方式——周遊鍵集合
Iterator it = map.keySet().iterator();
while(it.hasNext()){
System.out.println("鍵:" + it.next());
Iterator it2 = map.entrySet().iterator();
while(it2.hasNext()){
System.out.println("鍵:" + it2.next());
}
結果:
鍵:b? 值:2
鍵:c? 值:3
鍵:a? 值:1
--------------
鍵:b
鍵:c
鍵:a
鍵:b=2
鍵:c=3
鍵:a=1
在頁面上使用EL表達式周遊普通Map集合
<%
Map map=new HashMap();
map.put("A", "1");
map.put("B", "2");
map.put("C", "3");
pageContext.setAttribute("map",map);
%>
<c:forEach items="${map}" var="m">
鍵:${m.key}
值:${m.value}
</c:forEach>
使用EL表達式周遊Map集合(值存放的是對象)
<%
Person p=new Person();
p.setAddress("aa");
p.setName("aa");
Person p2=new Person();
p2.setAddress("bb");
p2.setName("bb");
Person p3=new Person();
p3.setAddress("cc");
p3.setName("cc");
Map map=new HashMap();
map.put("a", p);
map.put("b", p2);
map.put("c", p3);
pageContext.setAttribute("map",map);
%>
<c:forEach items="${map}" var="m">
${m.key}
${m.value.name} //m.value取得的是對象的記憶體位址,是以可以直接用m.value.name(name為Person對象的屬性)
</c:forEach>