一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|編程技術|正則表達式|

服務器之家 - 編程語言 - JAVA教程 - java面試題——詳解HashMap和Hashtable 的區(qū)別

java面試題——詳解HashMap和Hashtable 的區(qū)別

2020-07-07 12:44無限大 JAVA教程

本篇文章主要介紹了java中HashMap和Hashtable的區(qū)別,具有一定的參考價值,有需要的可以了解一下。

一.HashMapHashtable 的區(qū)別

我們先看2個類的定義

?
1
2
3
public class Hashtable
 extends Dictionary
 implements Map, Cloneable, java.io.Serializable
?
1
2
3
public class HashMap
 extends AbstractMap
 implements Map, Cloneable, Serializable

可見Hashtable 繼承自 Dictiionary 而 HashMap繼承自AbstractMap

Hashtable的put方法如下

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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方法如下

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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方法。

  HashMap Hashtable
父類 AbstractMap Dictiionary
是否同步
k,v可否null

HashMap是Hashtable的輕量級實現(非線程安全的實現),他們都完成了Map接口,主要區(qū)別在于HashMap允許空(null)鍵值(key),由于非線程安全,效率上可能高于Hashtable。

HashMap允許將null作為一個entry的key或者value,而Hashtable不允許。

HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因為contains方法容易讓人引起誤解。

Hashtable繼承自Dictionary類,而HashMap是Java1.2引進的Map interface的一個實現。

最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多個線程訪問Hashtable時,不需要自己為它的方法實現同步,而HashMap 就必須為之提供外同步(Collections.synchronizedMap)。

Hashtable和HashMap采用的hash/rehash算法都大概一樣,所以性能不會有很大的差異。

總結:

HashMap中鍵值 允許為空 并且是非同步的

Hashtable中鍵值 不允許為空 是同步的

繼承不同,但都實現了Map接口

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:http://www.cnblogs.com/hcl22/p/6095927.html

延伸 · 閱讀

精彩推薦
  • JAVA教程java代碼抓取網頁郵箱的實現方法

    java代碼抓取網頁郵箱的實現方法

    下面小編就為大家?guī)硪黄猨ava代碼抓取網頁郵箱的實現方法。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧 ...

    jingxian4212020-05-08
  • JAVA教程淺談FileItem類的常用方法

    淺談FileItem類的常用方法

    下面小編就為大家?guī)硪黄獪\談FileItem類的常用方法。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧 ...

    jingxian4802020-06-03
  • JAVA教程Eclipse配置Tomcat和JDK步驟圖解

    Eclipse配置Tomcat和JDK步驟圖解

    這篇文章主要內容是Eclipse配置Tomcat和JDK步驟圖解,需要的朋友可以參考下 ...

    JavaAlpha4622020-01-02
  • JAVA教程全方位講解Java的面向對象編程思想

    全方位講解Java的面向對象編程思想

    這篇文章主要介紹了Java的面相對象編程思想,包括類對象方法和封裝繼承多態(tài)等各個方面的OOP基本要素,非常推薦,需要的朋友可以參考下 ...

    nisior1982020-03-25
  • JAVA教程簡單介紹線性表以及如何實現雙鏈表

    簡單介紹線性表以及如何實現雙鏈表

    本文先介紹線性表的幾個基本組成部分:數組、單向鏈表、雙向鏈表;隨后給出雙向鏈表的C、C++和Java三種語言的實現,需要的朋友可以參考下 ...

    sky5449003734322019-12-29
  • JAVA教程圖文詳解Java中class的初始化順序

    圖文詳解Java中class的初始化順序

    網上有很多關于Java中class的初始化順序文章,但是本文通過圖文更加詳細的介紹了Java中class的初始化順序,并對class的裝載順序進行了講解,下面一起來看...

    曉來誰聽風雨聲1472020-06-04
  • JAVA教程java反射簡單實例

    java反射簡單實例

    這篇文章主要介紹了java反射機制,以一個簡單實例形式分析了Java反射的原理與實現技巧,需要的朋友可以參考下 ...

    Benjamin_whx3132019-12-09
  • JAVA教程Java注解Annotation解析

    Java注解Annotation解析

    這篇文章主要為大家詳細介紹了Java注解Annotation,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    xiaohanluo4022020-06-15
主站蜘蛛池模板: 色综合天天娱乐综合网 | 欧美色精品天天在线观看视频 | 欧美日韩三区 | chinese腹肌gay| 日本三级香港三级久久99 | 色哟哟在线观看 | www.青草视频 | 亚洲+欧美+国产+综合 | 调教老师肉色丝袜的故事 | 国产农村乱子伦精品视频 | 亚洲爱v | 星空传媒在线视频 | sss在线观看免费视频 | 亚洲羞羞视频 | 国产成人精品一区二区不卡 | 精品亚洲综合在线第一区 | 91免费播放人人爽人人快乐 | 亚久久伊人精品青青草原2020 | 国产在线成人精品 | 精品人人做人人爽久久久 | 新新电影理论中文字幕 | 欧美一级鲁丝片免费看 | 免费一级日本c片完整版 | 日本久久热 | 国产免费午夜 | 91亚洲视频在线观看 | 三叶草私人研究所 | 国产一区二区三区福利 | 欧美肥胖老妇做爰变态 | 久久精品中文字幕 | 好姑娘完整版在线观看中文 | 荡女人人爱 | 日本高清动作片www欧美 | 四虎永久在线精品免费影视 | 天生奶水1v1高h | 国产一区二区三区免费在线视频 | 国产精品日韩在线观看 | 99久视频 | 免费午夜影片在线观看影院 | 国产精品对白刺激久久久 | 国产1区精品 |