IdentityHashMap,HashMap,Hashtable

package test;

import java.util.HashMap;
import java.util.Hashtable;
import java.util.IdentityHashMap;
import java.util.Map;

public class MapTest {
public static void main(String[] args) {
//在 IdentityHashMap中,当且仅当(k1==k2)时,才认为两个键k1和k2相等
//此类设计仅用于其中需要引用相等性语义的罕见情况
Map<String, String> map = new IdentityHashMap<String, String>();
String str1 = new String("zhang");
String str2 = "zhang";
String str3 = new String("zhang");
map.put(str1, "1");
map.put(str2, "2");
map.put(str1, "3");
map.put(null, "4");
map.put(str3, null);
System.out.println("null:" + map.get(null));
System.out.println("map:" + map);
System.out.println("----------------------------");

//除了非同步和允许使用null之外,HashMap 类与Hashtable 大致相同
//HashMap,当且仅当满足下列条件时才认为两个键 k1 和 k2 相等:(k1==null ? k2==null : e1.equals(e2))
//也许你会想到这个疑问
//String s1 = null;
//String s2 = null;
//System.out.println(s1.equals(s2));以这样的方式直接判断两个字符串相等,而不需要(k1==null ? k2==null : e1.equals(e2))这么复杂,你可以试试
Map<String, String> map2 = new HashMap<String, String>();
map2.put(null, null);
map2.put(str1, "1");
map2.put(str2, "2");
map2.put(str3, "3");
System.out.println("map2:" + map2);
System.out.println(map2.get(null));
System.out.println("-----------------------------");

//HashTable实现了同步,且不允许使用null
Map<String, String> map3 = new Hashtable<String, String>();
//这样会报空指针错误
//map3.put(null, null);
//map3.put(null, "1");
//map3.put("2", null);
System.out.println(map3);
//这样会报空指针错误
//System.out.println(map3.get(null));
}
}

猜你喜欢

转载自lxzqz.iteye.com/blog/1849007