各種集合key,valueがnullであるかどうか
1360 ワード
HashMap
key,valueはnullでもよい
keyはnullが1つしかなく、複数のkey=nullが上書きされ、valueはnullが複数可能
Hashtable
key、valueはnullにはできません
直接キーを呼び出す.hashcodeメソッドなのでkeyはnull valueをnullにして空のポインタを投げ出すことはできません
ConcurrentHashMap
key、valueはnullにはできません
keyまたはvalueはnullで、空のポインタkeyを投げてhashcodeメソッドを呼び出した後、spreadメソッドで2回hash
TreeMap
keyはnullではなくvalueはnullであってもよい
keyはnull、空のポインタを投げ出す
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、空のポインタを投げ出す