map的遍历

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());
}
System.out.println("--------------");
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>