keySet获得的只是key值的集合,valueSet获得的是value集合,entryset获得的是键值对的集合。
package com.test2.test; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; public class mapiterator { //想想为什么不能再这里Map<Integer, String> hm =new HashMap<Integer, String>(); //因为这里是类,类必须要实例化对象才能使用里面的东西。 public static void main(String[] args) { Map<Integer, String> hm =new HashMap<Integer, String>(); hm.put(1, "lichen"); hm.put(2, "huwang"); hm.put(3, "lizhou"); hm.put(4, "sunwei"); hm.put(5, "likai"); hm.put(6, "hutao"); Iterator<Integer> itr1 = hm.keySet().iterator(); Iterator<String> itr2 =hm.values().iterator(); Iterator<Entry<Integer, String>> itr3 =hm.entrySet().iterator(); while (itr1.hasNext()){System.out.println(itr1.next());} while (itr2.hasNext()){System.out.println(itr2.next());} while (itr3.hasNext()){System.out.println(itr3.next().getValue()+":"+itr3.next().getKey() );} } }
结果:
1 2 3 4 5 6 lichen huwang lizhou sunwei likai hutao lichen:2 lizhou:4 likai:6
为什么迭代集合会只有3行呢而且是错的,因为itr3.next()在输出中出现了俩次,为了保证正确需要将itr3.next()值放在一个变量中。
while (itr1.hasNext()){System.out.println(itr1.next());}
while (itr2.hasNext()){System.out.println(itr2.next());}
//while (itr3.hasNext()){System.out.println(itr3.next().getValue()+":"+itr3.next().getKey() );}
while (itr3.hasNext()){
Map.Entry<Integer, String>hm2=itr3.next();
System.out.println(hm2.getValue()+":"+hm2.getKey() );}