精华内容
下载资源
问答
  • Why HashTable doesn’t allow null and HashMap does? To successfully store and retrieve objects from a HashTable, the objects used as keys must implement the hashCode method and the equals method. ...

    Why HashTable doesn’t allow null and HashMap does?

    To successfully store and retrieve objects from a HashTable, the objects used as keys must implement the hashCode method and the equals method. Since null is not an object, it can’t implement these methods. HashMap is an advanced version and improvement on the Hashtable. HashMap was created later.
    in one word, hashmap is more advanced. and we should choose hashmap instead of hashtable if there is no multiple thread involves.

    展开全文
  • Hashtable: public synchronized V put(K key, V value) { // Make sure the value is not null if (value == null) { throw new NullPointerException(); } // Makes sure the key is not already in the ha

    我们查看两个类的put方法的源码。
    Hashtable:

    public synchronized V put(K key, V value) {
            // 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() ;//这里如果key=null,抛出异常
            int index = (hash & 0x7FFFFFFF) % tab.length;
            @SuppressWarnings("unchecked")
            Entry<K,V> entry = (Entry<K,V>)tab[index];
            for(; entry != null ; entry = entry.next) {
                if ((entry.hash == hash) && entry.key.equals(key)) {
                    V old = entry.value;
                    entry.value = value;
                    return old;
                }
            }
    

    HashMap:

    public V put(K key, V value) {
            return putVal(hash(key), key, value, false, true);
        }
    
    final V putVal(int hash, K key, V value, boolean onlyIfAbsent,
                       boolean evict) {
            Node<K,V>[] tab; Node<K,V> p; int n, i;
            if ((tab = table) == null || (n = tab.length) == 0)
                n = (tab = resize()).length;
            if ((p = tab[i = (n - 1) & hash]) == null)
                tab[i] = newNode(hash, key, value, null);
            else {
                Node<K,V> e; K k;
                if (p.hash == hash &&
                    ((k = p.key) == key || (key != null && key.equals(k))))
                    e = p;
                else if (p instanceof TreeNode)
                    e = ((TreeNode<K,V>)p).putTreeVal(this, tab, hash, key, value);
                else {
                    for (int binCount = 0; ; ++binCount) {
                        if ((e = p.next) == null) {
                            p.next = newNode(hash, key, value, null);
                            if (binCount >= TREEIFY_THRESHOLD - 1) // -1 for 1st
                                treeifyBin(tab, hash);
                            break;
                        }
                        if (e.hash == hash &&
                            ((k = e.key) == key || (key != null && key.equals(k))))
                            break;
                        p = e;
                    }
                }
                if (e != null) { // existing mapping for key
                    V oldValue = e.value;
                    if (!onlyIfAbsent || oldValue == null)
                        e.value = value;
                    afterNodeAccess(e);
                    return oldValue;
                }
            }
            ++modCount;
            if (++size > threshold)
                resize();
            afterNodeInsertion(evict);
            return null;
        }
    

    Hashtable的源码可以看出,如果value=null直接抛出空指针异常;而使用key.hashCode()不允许key=null,所以无论是key还是value都不能是null。而在HashMap中并没有这样的限制,key和value允许使用null。

    展开全文
  • Hashtable 是线程安全的,ConcurrentHashMap 和 Hashtable允许 null 作为键和值的,HashMap允许null做为键值

    Hashtable 是线程安全的,ConcurrentHashMap 和 Hashtable 是不允许 null 作为键和值的,HashMap允许null做为键值

    展开全文
  • 一.历史原因:Hashtable是基于陈旧的Dictionary类...同步性:Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序安全的,不是同步的 三.值:只有HashMap可以让你将空值作为一个表的条目的key或value ...
    一.历史原因:Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现
    
    二.同步性:Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的
    三.值:只有HashMap可以让你将空值作为一个表的条目的key或value
    展开全文
  • 不是说Hashtable不允许键值为null吗?可是下面的代码怎么解释, 为什么可以put null值 所以hashtable允许键值为null的吗 [img=https://img-bbs.csdn.net/upload/201907/18/1563434164_841517.png][/img]
  • Hashtable

    千次阅读 多人点赞 2021-03-09 21:44:46
    Hashtable:线程安全的,不允许null的键或值;是线程安全的,但是Hashtable线程安全的策略实现代价却太大了,简单粗暴,get/put所有相关操作都是synchronized的,这相当于给整个哈希表加了一把大锁。多线程访问时候...
  • private fun hashtable() { //key value 都能为null val hashtable = Hashtable<String?, String?>() // hashtable.put(null, null) // hashtable.put(null, "") // hashtable.put("", null)...
  • 从例子中可以发现,hashmap毋庸置疑可以存储null键值对,hashtable和ConcurrentHashMap可以存储null键值对,并且null值,null可以单独存储,其原因剖析源码如下: 1.HashTable 2.ConcurrentHashMap 从分析中我们...
  • 先说结论:hashmap允许多个null值和一个null键,hashtable不允许有任何null值和null键 基于jdk1.8源码分析: 我们都知道Map作为集合中比较重要的键值对集合,key能重复,所以可以初步判断hashmap和hashtable...
  • Hashtable对象的key、value值均可为null。 且两者的的key值均能重复,若添加key相同的键值对,后面的value会自动覆盖前面的value,但不会报错。 1.从源码分析 HashMap从源码分析: HashMap在put的...
  • 1.从源码分析 HashMap从源码分析: HashMap在put的时候会调用hash()方法来计算key的hashcode值,可以从hash算法中看出当key==null时返回的值为0。...上面可以看出当HashTable存入的value为null时,抛出Nul...
  • hashmap hashtable

    2019-12-17 17:06:44
    HashTable不允许null值 HashMap是非线程安全的, HashTable是线程安全的,线程安全会影响读取效率,故HashMap的效率高些初始化大小相同HashMap初始化大小为16, HashTable初始化大小为11,两者的默认加载因子为...
  • Hashtable的值能为NULL

    千次阅读 2007-10-10 11:26:00
    汗颜,Hashtable的KEY能为NULL一早就知道,但是到现在才发现 Hashtable的VALUE也能为NULL,否则会抛空值异常。。。。。。。以后记住了........
  • HashMap VS Hashtable

    2018-03-17 11:09:00
    HashMap与Hashtable的异同点 hashtable是线程安全的,hashmap不是。对线程要求严格的情况下...HashTable不允许null作为key值或value值,Hashmap可以允许一个null作为key值,同时允许多个null作为value值。 HashM...
  • HashTable实现原理

    2019-07-09 08:06:40
    Hashtable与HashMap的区别 ...Hashtable不允许null key和null value,HashMap允许。 Hashtable是线程安全的,HashMap不是线程安全的。 HashMap的迭代器(Iterator)是fail-fast迭代器,而Hashtable的enumera...
  • hashmap和hashtable

    2018-06-26 08:53:52
    HashMap和HashTable区别1)HashMap非线程安全的、允许null值1).HashTable的方法...2).HashTable不允许null值(key和value都可以) ;HashMap允许null值(key和value都可以)。3).HashTable有一个contains(Object...
  • HashMap与HashTable的区别

    2017-04-08 20:38:35
    一、线程安全性 HashMap非线程安全 ...HashTable不允许null值,key判断是否为null,但是在null时会抛出空指针异常,因为put方法内部直接使用了key.hashCode() 三、继承public class HashMap extend
  • HashMap和HashTable区别

    2018-03-31 23:10:22
    HashMap和HashTable区别1、HashTable的方法前面都有...2、HashTable不允许null值(key和value都可以) ;HashMap允许null值(key和value都可以)。3、HashTable有一个contains(Object value)功能和containsValue(Ob...
  • ​ 1、从源码分析 ...HashTable源码分析 如图,当value为null的时候会报NullPointerException异常,当key为null的时候也会报NullPointerException异常 其他:ConcurrentHashmap、 HashMap和Hashtab
  • ##1.从源码分析 HashMap源码 HashMap在put的时候会调用hash()方法来计算key的hashcode值,可以从hash算法中看出当key==null时返回的值为0。...上面可以看出当HashTable存入的value为null时,抛出NullPointe...
  • java-Hashtable

    2021-02-26 20:23:41
    Hashtable:线程安全的,不允许null的键或值;是线程安全的,但是Hashtable线程安全的策略实现代价却太大了,简单粗暴,get/put所有相关操作都是synchronized的,这相当于给整个哈希表加了一把大锁。多线程访问时候...
  • HashMap和Hashtable的区别

    2020-04-08 15:06:19
    (1)HashMap继承自AbstractMap,而Hashtable继承自Directory (2)HashMap是线程安全的,而Hashtable是线程安全的 (3)Hashtable不允许null key和null value,但是HashMap允许
  • HashTable 和 HashMap

    2016-05-23 17:21:05
    HashTable不允许null值(key和value都可以),HashMap允许null值(key和value都可以)。 Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,需要自己为它的方法实现同步,而HashMap 就
  • hashmap为什么要允许key和value为空 但是hashtable不允许呢?源码说这是特殊的map,难道它除了线程安全,还有别的吗?
  • HashTable原理和底层实现

    千次阅读 2019-09-18 17:32:27
    上次咱们说到jdk1.8的HashMap原理,...HashMap允许null值,而HashTable不允许null值 HashMap是非线程安全的,而HashTable是线程安全的,线程安全会影响读取效率,故HashMap的效率高些 初始化大小相同HashMap初始化...
  • Java中的HashMap和HashTable的不同点: ...HashTable不允许null值和键,HashMap允许有一个null键和一个null值 HashMap的一个子类是LinkedHashMap。所以,如果想预知迭代顺序,只需将HashMap转换成一个Link
  • 7.允许null键的map你知道哪些 集合类 Key Value Super 说明 Hashtable 允许为 null 允许为 null Dictionary ...
  • Hashtable与HashMap的区别

    2018-05-12 14:15:48
    实现原理,功能相同,可以互用主要区别1.Hashtable继承Dictionary类,Hashtable实现Map接口2.Hashtable线程安全,HashMap线程非安全3.Hashtable不允许null值,HashMap允许null值...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 67,576
精华内容 27,030
关键字:

hashtable不允许null