Hashtable的contains() 、containsKey()和containsValue() 区别

  在学习享元模式过程当中,发现本身的demo和案例代码效果不一样,通过多番查找,原来本身误认为Hashtable的contains() 、containsKey() 二者等同了,其实不一样。网上资料也有些有误。 查看了源码,一目了然:学习

    public synchronized boolean containsKey(Object key) {
        Entry<?,?> tab[] = table;
        int hash = key.hashCode();
        int index = (hash & 0x7FFFFFFF) % tab.length;
        for (Entry<?,?> e = tab[index] ; e != null ; e = e.next) {
            if ((e.hash == hash) && e.key.equals(key)) {
                return true;
            }
        }
        return false;
    }

 public synchronized boolean contains(Object value) {
        if (value == null) {
            throw new NullPointerException();
        }

        Entry<?,?> tab[] = table;
        for (int i = tab.length ; i-- > 0 ;) {
            for (Entry<?,?> e = tab[i] ; e != null ; e = e.next) {
                if (e.value.equals(value)) {
                    return true;
                }
            }
        }
        return false;
    }

 

   public boolean containsValue(Object value) {
        return contains(value);
    }

 

 

经过源码,能够知道:Hashtable的contains() 比较的是值,和containsValue()等价,containsKey()顾名思义,就是比较的键。spa

 

另外附加一下其余类似的用法:code

Hashmap中有两个:containsValue(),containsKey(),见名知意,不会混淆对象

ArrayList中有两个:contains() 、containsAll() 集合的元素是单个对象,不是键值对,不会有歧义blog

相关文章
相关标签/搜索