HashMap和IdentifyHashMap是Java中兩個常見的Map類,對這兩個類感興趣的可以去看他們的源碼。在這裏只說他們的區別。
HashMap類判斷鍵k1和k2相等的條件爲 (k1==null?k2==null:k1.equals(k2))==true
IdentifyHashMap判斷k1和k2相等的條件是(k1==k2)
來看下面的代碼:
import java.util.HashMap;
import java.util.IdentityHashMap;
import java.util.Map;
/**
* Created by yizhen on 17-3-28.
*/
public class G {
public static void main(String[] args) {
{
Map<String, Integer> map = new HashMap<>();
map.put("a", 1);
map.put("a", 2);
map.put(new String("a"), 3);
map.put(new String("a"), 4);
System.out.println(map);
}
{
Map<Key,Integer> map=new HashMap<>();
map.put(new Key(),1);
map.put(new Key(),2);
System.out.println(map);
}
{
Map<String, Integer> map = new IdentityHashMap<>();
map.put("a", 1);
map.put("a", 2);
map.put(new String("a"), 3);
map.put(new String("a"), 4);
System.out.println(map);
}
}
}
class Key{}
這段代碼的輸出是:
{a=4}
{Key@48ec77cb=1,Key@1cacd5d4=2}
{a=4,a=3,a=2}
筆者開設了一個知乎live,詳細的介紹的JAVA從入門到精通該如何學,學什麼?
提供給想深入學習和提高JAVA能力的同學,歡迎收聽https://www.zhihu.com/lives/932192204248682496