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具体返回的类型
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具体返回的类型