首页 ┆ 网站地图 ┆ 在线留言 ┆ 游戏资讯 ┆ 资源下载  ┆ 端午节祝福 
设为首页
加入收藏
联系我们
热门关键字: .net应用  操作系统  Dreamweaver  WinRAR  网络推广
高级搜索
您当前的位置: 主页>JAVA专区>JAVA面试题>java面试题举例介绍Hashtable与HashMap的区别
java面试题举例介绍Hashtable与HashMap的区别
来源: 发布时间:2008-06-11 发布人: 浏览: 人次   字体: [ ]  

java面试题之Hashtable与HashMap的区别,下面就先看一下两个小事例:
public class Hashtable  
    extends Dictionary  
    implements Map, Cloneable, java.io.Serializable 

public class HashMap  
    extends AbstractMap  
    implements Map, Cloneable, Serializable 

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

Hashtable的put方法如下

public synchronized V put(K key, V value) {  //注意这里1  
  // Make sure the value is not null  
  if (value == null) { // 注意这里 2  
    throw new NullPointerException();  
  }  
  // Makes sure the key is not already in the hashtable.  
  Entry tab[] = table;  
  int hash = key.hashCode(); //注意这里 3  
  int index = (hash & 0x7FFFFFFF) % tab.length;  
  for (Entry e = tab[index]; e != null; e = e.next) {  
    if ((e.hash == hash) && e.key.equals(key)) {  
      V old = e.value;  
      e.value = value;  
      return old;  
    }  
  }  
  modCount++;  
  if (count >= threshold) {  
    // Rehash the table if the threshold is exceeded  
    rehash();  
    tab = table;  
    index = (hash & 0x7FFFFFFF) % tab.length;  
  }  
  // Creates the new entry.  
  Entry e = tab[index];  
  tab[index] = new Entry(hash, key, value, e);  
  count++;  
  return null;  

注意1 方法是同步的
注意2 方法不允许value==null
注意3 方法调用了key的hashCode方法,如果key==null,会抛出空指针异常 HashMap的put方法如下

public V put(K key, V value) { //注意这里 1  
  if (key == null)  // 注意这里 2  
    return putForNullKey(value);  
  int hash = hash(key.hashCode());  
  int i = indexFor(hash, table.length);  
  for (Entry e = table[i]; e != null; e = e.next) {  
    Object k;  
    if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {  
      V oldValue = e.value;  
      e.value = value;  
      e.recordAccess(this);  
      return oldValue;  
    }  
  }  
  modCount++;  
  addEntry(hash, key, value, i);  // 注意这里   
  return null;  

注意1 方法是非同步的
注意2 方法允许key==null
注意3 方法并没有对value进行任何调用,所以允许为null

补充:
Hashtable 有一个 contains方法,容易引起误会,所以在HashMap里面已经去掉了
当然,2个类都用containsKey和containsValue方法。

结论:ashMap 在大多数情况下是优先选择的。


↓下一篇:没有了
相 关 文 章   发布商链接
·三十二道Java面试题(包含问与答)
·软通动力java面试题
·java面试题一例:Java作用域描述符的...
·java面试题之new String创建对象的理...
 §最新评论:(评论内容只代表网友观点,与本站立场无关!)
网名: 验证码:  【所有评论】【↑返回顶部
评 分: 12 345
评论内容:(不能超过500字,请自觉遵守互联网相关政策法规。[按 Ctrl+Enter 可直接提交]
注意:请勿在本站发布政治话题、色情及违反法律的内容。
IT知道网 声明:刊登此文章是为了传递更多信息,文章内容仅供参考,转载请注明出处。
推 荐 文 章
·java面试题之new String创建...
·java面试题一例:Java作用域...
·软通动力java面试题
·三十二道Java面试题(包含问与
热 门 文 章
·软通动力java面试题
·三十二道Java面试题(包含问与...
·java面试题一例:Java作用域...
·java面试题之new String创建...
网站首页 - 关于本站 - 加入收藏 - 网站地图 - 友情连接 - 在线留言 - 联系我们 - 返回顶部
Copyright © 2007 IT知道网.[冀ICP备07026896号]. All Rights Reserved .