毕老师说Key和Value是一对夫妻,Map.Entry是结婚证,但我觉得Value和Key并不是平等的关系,Key更像一个对象型的索引。
我觉得这样比喻比较好:可以将Map中的情况看做:一个地址(Key)引出一条线,线的另一头拴在一个住户门口(Value),Map.Entry就是这条线的类型。
关于Map的遍历,Map接口提供了两个函数:keySet()和entrySet(),前者返回Set<K>,后者返回Set<Map.Entry<K,V>>。
这两个函数都返回一个我们熟悉的接口Set,于是我们可以通过借助Set的迭代器来遍历整个Map。
①keySet()方法:
import java.util.*;
public class MapDemo
{
public static void main(String[]args)
{
Map<Integer,String> m=new HashMap<Integer,String>();
m.put(1,"java001");
m.put(3,"java003");
m.put(5,"java005");
Set<Integer> keySet=m.keySet();
for(Iterator<Integer> it= keySet.iterator();it.hasNext();)
{
sop(m.get(it.next()));
}
}
public static<T> void sop(T t)
{
System.out.println(t);
}
}
其实就是把Key拿出来作为索引。
②entrySet()方法:
Map.Entry是怎么来的呢?Entry事实上是一个Map的内嵌类。
*interface Map<K,V>
*{
* public static interface Entry<K,V>
* {
* public abstract K getKey();
* public abstract V getValue();
* }
*}
*class HashMap implements Map<K,V>
*{
* class HE implements Map.Entry<K,V>//-----------------------------
* {
* public K getKey();
* public V getValue();
* }
*}
如上是来历。
方法的使用:
import java.util.*;
public class MapDemo1
{
public static void main(String[]args)
{
Map<Integer,String> m=new HashMap<Integer,String>();
m.put(1,"java001");
m.put(3,"java003");
m.put(5,"java005");
Set<Map.Entry<Integer,String>> entrySet=m.entrySet();
for(Iterator<Map.Entry<Integer,String>> it= entrySet.iterator();it.hasNext();)
{
Map.Entry<Integer,String> me=it.next();
sop(me.getKey()+"____"+me.getValue());
sop(me.setValue("java007")+"~~~"+me.getValue());//返回原值
sop(m);
}
}
public static<T> void sop(T t)
{
System.out.println(t);
}
}