各種集合key,valueがnullであるかどうか

1360 ワード

HashMap
key,valueはnullでもよい
    static final int hash(Object key) {
        int h;
        return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
    }


keyはnullが1つしかなく、複数のkey=nullが上書きされ、valueはnullが複数可能
        HashMap map = new HashMap<>();
        map.put(1, null);
        map.put(2, null);
        map.put(null, 1);
        map.put(null, 2);
        System.out.println(map);//{null=2, 1=null, 2=null}

Hashtable
key、valueはnullにはできません
        // Make sure the value is not null
        if (value == null) {
            throw new NullPointerException();
        }

        // Makes sure the key is not already in the hashtable.
        Entry,?> tab[] = table;
        int hash = key.hashCode();

直接キーを呼び出す.hashcodeメソッドなのでkeyはnull valueをnullにして空のポインタを投げ出すことはできません
ConcurrentHashMap
key、valueはnullにはできません
        if (key == null || value == null) throw new NullPointerException();
        int hash = spread(key.hashCode());

keyまたはvalueはnullで、空のポインタkeyを投げてhashcodeメソッドを呼び出した後、spreadメソッドで2回hash
TreeMap
keyはnullではなくvalueはnullであってもよい
            if (key == null)
                throw new NullPointerException();

keyはnull、空のポインタを投げ出す