从遍历Map瞧对引用的概念

从遍历Map看对引用的概念
1.在变成过程中我们通常会用到遍历Map,具体代码如下所示:
    Map<Integer, String> map = new HashMap<Integer, String>();
        map.put(1, "a");
        map.put(2, "b");
        Iterator<Entry<Integer, String>> iter = map.entrySet().iterator();
        int key;
        String value = null;
        while(iter.hasNext()){
            key = iter.next().getKey();
            value = iter.next().getValue();
            // do something
        }
    我们知道Map和Iterator都是接口,接口是不能实例化的。但是这里的Map<Integer,String> map = new HashMap<Integer, String>();是什么意思?难道不是实例化了一个Map对象?如果对此有疑问,说明是对引用的概念不明了。这里在堆中创建的是HashMap的一个对象,而map只是存在于栈空间中,引用了堆中的HashMap对象。

2.为什么不使用HashMap<Integer, String> map = new HashMap<Integer, String>()
    在程序实现中,我们希望隐藏具体的实现过程。代码如下:
public class Test{
    public static void main(String[] args){
        Map<Integer, String> map = getMap();
    }
    public static Map<Integer, String> getMap(){
        Map<Integer, String> map = new HashMap<Integer, String>();
        map.put(1, "a");
        map.put(2, "b");
        Iterator<Entry<Integer, String>> iter = map.entrySet().iterator();
        int key;
        String value = null;
        Entry<Integer, Strng> entry = null;
        while(iter.hasNext()){
            entry = iter.next();
            key = entry.getKey();
            value = entry.getValue();
            // do something
        }
        return map;
    }
//    public static Map<Integer, String> getMap(){
//        Map<Integer, String> map = new LinkedHashMap<Integer, String>();
//        map.put(1, "a");
//        map.put(2, "b");
//        Iterator<Entry<Integer, String>> iter = map.entrySet().iterator();
//        while(iter.hasNext()){
//            // do something
//        }
//        return map;
//    }
}
这样不管是getMap方法返回的是HashMap还是LinkedHashMap,在main函数中都只需要定义Map<Integer, String> map = getMap();即可,而不需要知道getMap具体返回的类型