zoukankan      html  css  js  c++  java
  • 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()顾名思义,就是比较的键。

    另外附加一下其他相似的用法:

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

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

  • 相关阅读:
    2-用EasyNetQ连接RabbitMQ(黄亮翻译)
    1-EasyNetQ介绍(黄亮翻译)
    MVC之——Razor语法
    MVC过滤器的用法
    MVC初级知识之——Routing路由
    MVC初级知识之——View与Controller的讲解
    MVC初级教程(四)
    MVC初级教程(三)
    MVC初级教程(二)
    MVC初级教程(一)
  • 原文地址:https://www.cnblogs.com/pikaqiucode/p/11230065.html
Copyright © 2011-2022 走看看