Map是一种以键值对的形式存在的集合,其中每个键映射到一个值,几乎所有通用 Map 都使用哈希映射。位于java.util包中。其子类有HashMap,TreeMap。HashMap缺省的情况下是线程非安全的;当多线程访问时可能需要提供同步机制,key和value的值允许为null,键值允许重复,没有顺序。
1、普通Java类遍历
Map map=new HashMap(); map.put("a", "1"); map.put("b", "2"); map.put("c", "3"); map.keySet();//键集合 map.values();//值集合 map.entrySet();//键值集合 //遍历键,通过键取值 Set set = map.keySet(); for (Object key : set) { System.out.println("键:"+key+" 值:"+map.get(key)); } //遍历键集合 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()); }
2、使用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>
3、使用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>
4、使用struts标签<logic:iterate />遍历
<% List list=new ArrayList(); list.add("aa"); list.add("bb"); list.add("cc"); Map map=new HashMap(); map.put("a", list); pageContext.setAttribute("map",map); %> <logic:iterate id="m" name="map"> 键:${m.key} <logic:iterate id="childm" name="m" property="value">[color=blue]内层标签的name对应的是外层标签的id,一定要加上property="value"[/color] 值:${childm} </logic:iterate> </logic:iterate>