HashMap与HashTable

来源:互联网 发布:单片机烧录软件 编辑:程序博客网 时间:2024/05/21 21:50

首先是看到了觉得nice的博客:http://blog.csdn.net/java2000_net/article/details/2512510

里面通过查看源码总结出以下几点:

可见Hashtable 继承自 Dictiionary 而 HashMap继承自AbstractMap

其中 Hashtable put(大部分)方法(通过查看不仅仅是put方法,大部分方法都加了synchronized关键字)

   是同步的

   不允许value==null

   调用了key的hashCode方法,如果key==null,会抛出空指针异常。

HashMap put方法(同上,看到的方法都没有synchronized关键字)

   是非同步的
   允许key==null
   并没有对value进行任何调用,所以允许为null。

而HashMap的contains方法

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;

    }

//table的初始化如下

public Hashtable(int initialCapacity, float loadFactor) {
        //省略代码。。
        table = new Entry<?,?>[initialCapacity];
  }

containsValue方法:

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

由于这两个方法,本质相同,

所以在新集合中

HashMap去掉了contains方法。




0 0
原创粉丝点击