国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

java中HashMap和Hashtable的區(qū)別

MudOnTire / 2099人閱讀

摘要:的函數(shù)都是同步的,這意味著它是線程安全的。直接使用對(duì)象的。是的輕量級(jí)實(shí)現(xiàn)非線程安全的實(shí)現(xiàn)都完成了接口,主要區(qū)別在于能否鍵對(duì)值能為。同時(shí)其內(nèi)部方法有區(qū)別中將的方法去掉了,改為和避免混淆。支持的遍歷種類不同只支持迭代器遍歷。

java在數(shù)據(jù)結(jié)構(gòu)中的映射定義了一個(gè)接口java.util.Map。
Map包含三個(gè)實(shí)現(xiàn)類HashMap、Hashtable、TreeMap。Map是用來(lái)存儲(chǔ)鍵對(duì)值
(索引為對(duì)象key K,值為對(duì)象value V)的數(shù)據(jù)結(jié)構(gòu)。

首先我們得明確其基本狀況再進(jìn)行比較。
HashMap:
(1)由數(shù)組+鏈表組成的,基于哈希表的Map實(shí)現(xiàn),數(shù)組是HashMap的主體,
鏈表則是主要為了解決哈希沖突而存在的。
(2)不是線程安全的,HashMap可以接受為null的鍵(key)和值(value)。
(3)HashMap重新計(jì)算hash值

Hashtable:
(1)Hashtable 是一個(gè)散列表,它存儲(chǔ)的內(nèi)容是鍵值對(duì)(key-value)映射。
(2)Hashtable 的函數(shù)都是同步的,這意味著它是線程安全的。它的key、value都不可以為null。
(3)HashTable直接使用對(duì)象的hashCode。

HashMap是Hashtable的輕量級(jí)實(shí)現(xiàn)(非線程安全的實(shí)現(xiàn))都完成了Map接口,主要區(qū)別在于能否鍵對(duì)值能為null。
同時(shí)其內(nèi)部方法有區(qū)別:HashMap中將Hashtable的contains方法去掉了,改為containsvalue和containsKey,避免混淆。Hashtable繼承于Dictionary類,而HashMap是java 1.2 引進(jìn)的Map接口一個(gè)實(shí)現(xiàn)。HashMap就效率而言高于Hashtable。

TreeMap則是基于紅黑樹的一種提供順序訪問的Map,它的get、put、remove之類的操作都是o(logn)的時(shí)間復(fù)雜度,具體順序可以由指定的Comparator來(lái)決定,或者根據(jù)鍵的自然順序來(lái)判斷

區(qū)別:

1 繼承和實(shí)現(xiàn)方式不同

HashMap 繼承于AbstractMap,實(shí)現(xiàn)了Map、Cloneable、java.io.Serializable接口。
Hashtable 繼承于Dictionary,實(shí)現(xiàn)了Map、Cloneable、java.io.Serializable接口。

2 線程安全不同

Hashtable的幾乎所有函數(shù)都是同步的,即它是線程安全的,支持多線程。
而HashMap的函數(shù)則是非同步的,它不是線程安全的。

3 對(duì)null值的處理不同

HashMap的key、value都可以為null。
Hashtable的key、value都不可以為null。

4 支持的遍歷種類不同

HashMap只支持Iterator(迭代器)遍歷。
而Hashtable支持Iterator(迭代器)和Enumeration(枚舉器)兩種方式遍歷

5 通過Iterator迭代器遍歷時(shí),遍歷的順序不同
HashMap是“從前向后”的遍歷數(shù)組;再對(duì)數(shù)組具體某一項(xiàng)對(duì)應(yīng)的鏈表,從表頭開始進(jìn)行遍歷。
Hashtabl是“從后往前”的遍歷數(shù)組;再對(duì)數(shù)組具體某一項(xiàng)對(duì)應(yīng)的鏈表,從表頭開始進(jìn)行遍歷。

6 容量的初始值 和 增加方式都不一樣

HashMap默認(rèn)的容量大小是16;增加容量時(shí),每次將容量變?yōu)椤霸既萘縳2”。
Hashtable默認(rèn)的容量大小是11;增加容量時(shí),每次將容量變?yōu)椤霸既萘縳2 + 1”。

7 添加key-value時(shí)的hash值算法不同

HashMap添加元素時(shí),是使用自定義的哈希算法。
Hashtable沒有自定義哈希算法,而直接采用的key的hashCode()。

8 部分API不同

Hashtable支持contains(Object value)方法,而且重寫了toString()方法;
而HashMap不支持contains(Object value)方法,沒有重寫toString()方法。

最后如何實(shí)現(xiàn)HashMap的同步,有兩種方法,一是:可以通過靜態(tài)方法
Map m =Collections.synchronizedMap(new HashMap())來(lái)打到同步的效果
二是:接使用JDK 5.0之后提供的java.util.concurrent包里的ConcurrentHashMap類。

表格比較如下:

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/75725.html

相關(guān)文章

  • HashMap Hashtable 6 個(gè)區(qū)別,最后一個(gè)沒幾個(gè)人知道!

    摘要:線程安全是線程安全的,不是線程安全的。是添加的,貌似沒人用過這個(gè),棧長(zhǎng)我也沒用過。。最后一點(diǎn)有幾個(gè)人知道知道的給棧長(zhǎng)點(diǎn)個(gè)贊回應(yīng)一下,不知道的有收獲的也點(diǎn)一個(gè)贊支持一下吧。 HashMap 和 Hashtable 是 Java 開發(fā)程序員必須要掌握的,也是在各種 Java 面試場(chǎng)合中必須會(huì)問到的。 但你對(duì)這兩者的區(qū)別了解有多少呢? 現(xiàn)在,棧長(zhǎng)我給大家總結(jié)一下,或許有你不明朗的地方,在棧長(zhǎng)...

    xiguadada 評(píng)論0 收藏0
  • 這幾道Java集合框架面試題在面試幾乎必問

    摘要:若遇到哈希沖突,則將沖突的值加到鏈表中即可。之后相比于之前的版本,之后在解決哈希沖突時(shí)有了較大的變化,當(dāng)鏈表長(zhǎng)度大于閾值默認(rèn)為時(shí),將鏈表轉(zhuǎn)化為紅黑樹,以減少搜索時(shí)間。有序,唯一紅黑樹自平衡的排序二叉樹。 本文是最最最常見Java面試題總結(jié)系列第三周的文章。主要內(nèi)容: Arraylist 與 LinkedList 異同 ArrayList 與 Vector 區(qū)別 HashMap的底層...

    bigdevil_s 評(píng)論0 收藏0
  • 記一次慘痛面試經(jīng)歷

    摘要:把內(nèi)存分成兩種,一種叫做棧內(nèi)存,一種叫做堆內(nèi)存在函數(shù)中定義的一些基本類型的變量和對(duì)象的引用變量都是在函數(shù)的棧內(nèi)存中分配。堆內(nèi)存用于存放由創(chuàng)建的對(duì)象和數(shù)組。 一次慘痛的阿里技術(shù)面 就在昨天,有幸接到了阿里的面試通知,本來(lái)我以為自己的簡(jiǎn)歷應(yīng)該不會(huì)的到面試的機(jī)會(huì)了,然而機(jī)會(huì)卻這么來(lái)了,我卻沒有做好準(zhǔn)備,被面試官大大一通血虐。因此,我想寫點(diǎn)東西紀(jì)念一下這次的經(jīng)歷,也當(dāng)一次教訓(xùn)了。其實(shí)面試官大大...

    CoorChice 評(píng)論0 收藏0
  • Java技術(shù)面試“小抄”——集合類(實(shí)時(shí)更新)

    摘要:接口在類庫(kù)中有很多具體的實(shí)現(xiàn)。接口的意義是為各種具體的集合提供了最大化的統(tǒng)一操作方式。集合類框架的基本接口代表一組對(duì)象,每一個(gè)對(duì)象都是他的子元素不包含重復(fù)元素的有序的,可以包含重復(fù)元素將映射到的對(duì)象,不能重復(fù)。 寫在之前: 這篇文章是自己面試過程中,總結(jié)出來(lái)的關(guān)于Java集合類的總結(jié)。每次面試之前來(lái)出來(lái)看看,速度快,也能很迅速的回憶一些細(xì)節(jié)問題。發(fā)布這篇文章,不僅僅是希望大家臨陣磨槍,...

    Travis 評(píng)論0 收藏0
  • Java容器類研究9:其它Map

    摘要:和的區(qū)別和的區(qū)別是,在操作的方法上加入關(guān)鍵字,使得線程安全。使用進(jìn)行比較,或者傳入的比較器。基于,它自己的任務(wù)主要是維護(hù)保持順序的雙向鏈表。和的區(qū)別提供了一個(gè)高效的線程安全的訪問和更新的方式。在中的過程和類似。 HashTable和HashMap的區(qū)別 HashTable和HashMap的區(qū)別是,HashTable在操作table的方法上加入synchronized關(guān)鍵字,使得線程安全...

    zilu 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<