Map集合遍历
?
public class MapTest { public static void main(String[] args) { Map<String, String> map = new HashMap<String, String>(); map.put("01", "jade1"); map.put("02", "jade2"); map.put("03", "jade3"); map.put("04", "jade4"); map.put(null, "jade"); //getValue4KeySet(map); getValue4EntrySet(map); } public static void getValue4KeySet(Map map) { Set set = map.keySet(); for (Object key : set) { System.out.println("key:" + key + ",value:" + map.get(key)); } } public static void getValue4EntrySet(Map map){ Set<Map.Entry> set = map.entrySet(); for (Iterator iterator = set.iterator(); iterator.hasNext();) { Entry entry = (Entry) iterator.next(); System.out.println(entry.getKey()+","+entry.getValue()); } }}
??
?
?? 上面的操作,无论是
map.keySet()
?? 还是
map.entrySet()
?? 都是返回一个Set集合,所以说Map是基于Set的操作,数据无序,不可重复,Map的key可以为null,Set的数据可以存null
?
?
Set set = map.keySet();
??? Set集合中存放的是map的所有key,再通过key来取value,map.getValue(key);
?
??
Set<Map.Entry> set = map.entrySet();
??? 返回的其实是个Ma.Entry类型的set集合,,而Map.Entry中存放的是key-value这样的数据项(就是key-value识为一个Entry一个整体,认为是一个关系对象);只要使用entry.getKey,entry.getValue就可以直接获取到这个Entry里面的key,value;
?
? 查看api得知Entry也是个接口,那么Map.Entry,就是Entry是Map接口的内部接口,getKey,getValue是Entry的方法,定义在内部大概是因为这个Entry本身就是为Map服务的这是伪代码,这里没有写泛型,无所谓了
public interface Map { interface Entry{ public abstract Object getKey(); public abstract Object getValue(); }}
? 最上面代码(MapTest类)使用的既然是HashMap类为实现类,可以调用entrySet(),说明在HashMap中,形如:
public class HashMap implements Map { class Entry implements Map.Entry{ @Override public Object getKey() { return null; } @Override public Object getValue() { return null; } }}
?
? 才可以通过,这样的方式来操作
Map map = new HashMap(); map.put("01", "jade1"); map.put(null, "jade"); Set<Entry> set = map.entrySet(); for (Entry entry : set) { entry.getKey(); entry.getValue(); }
?