2014-05-13 68 views
0

我知道這個問題可能有點愚蠢,但我只想澄清疑問。 當通過Java教程收集(http://docs.oracle.com/javase/tutorial/collections/index.html)時,我沒有找到任何有關Vector和Hashtable的相關信息。兩者都屬於Collection框架,因爲Vector是List的實現,而Hashtable是Map的實現。如果是這樣,那爲什麼它不在Sun教程中?我在哪裏可以找到適用於Collection的Sun教程,其中包含關於Vector和Hashtable的良好文檔以及有關存儲在List,Set和Map中的元素的深入知識?我在哪裏可以找到Java中的文檔Vector和Hashtable?

+0

向量是List的實現,而不是Set。 – schmop

+0

對不起,輸入錯誤 – Nizam

回答

6

因爲VectorHashtable是舊的舊版集合類。不要使用它們。

而不是Vector使用ArrayList;而不是Hashtable使用HashMap

當Java 1.2發佈(很久以前)時,新的集合類被添加到Java(集合框架)。 Sun沒有刪除舊的類,如VectorHashtable,因爲他們希望新的Java版本向後兼容。現在我們還有那些老班。

需要注意的一點是VectorHashtable是同步的,而ArrayListHashMap不是。大多數時候你不需要同步;如果你這樣做,那麼你必須注意同步你的ArrayList,如果你需要一個地圖,使用ConcurrentHashMap而不是普通的HashMap

+0

謝謝Jesper的回答。但是,我是否可以爲Collection收集包含Vector和Hashtable的舊Java教程,就像Sun最近收集的那個教程一樣。其次,任何有關深入瞭解存儲在List,Set和Map中的元素的知識的教程(Sun doc將是首選)? – Nizam

+1

您可以在[API文檔](http://docs.oracle.com/javase/8/docs/api/)中查找這些類。他們的工作與其他列表和地圖類幾乎相同,那麼爲什麼您需要爲這些舊類提供特殊教程?您已經找到的教程解釋瞭如何使用列表,集合和地圖。 – Jesper

+0

我讀了關於集合,它說hashset將它的元素存儲在一個散列表和散列表存儲中。我只是渴望知道什麼是桶。如何添加元素,以及何時刪除它是從後端或前端刪除。哈希碼如何幫助哈希表。散列碼是否也存儲在存儲區中。如果是這樣,等等等等。我希望你明白我想說的。 – Nizam

1

一般而言,VectorHashtable可能被視爲棄用。

如果你看一下VectorHashtable你會看到,他們原來實行的ArrayListHashMap網上的javadoc,直到集合框架來了,在這一點上,他們被改進爲實現從集合框架接口;這樣一來,依賴那些在那裏的班級的老班級就不會中斷。他們和他們更常見的弟兄們唯一的區別是他們是同步的。

在絕大多數情況下,不需要同步,因此程序員將避免同步開銷並選擇常規的ArrayListsHashMaps。如果需要同步收集,總是有Collections.synchronized____()(或ConcurrentHashMap),這也可以很好地工作。

您可能不需要VectorHashtable的教程,因爲它們的行爲已經與您可能熟悉的類非常相似,並且因爲它們的用處不大。關於List,SetMap的更多信息,在線javadoc是goodplacestart

+0

+1,注意它們是同步的 – RobAu

0

隨着以Vector的JavaDoc提到:

從Java 2平臺V1的。2,這個類被改進來實現List接口,使它成爲Java集合框架的成員。與新的集合實現不同,Vector是同步的。如果不需要線程安全的實現,建議使用ArrayList來代替Vector。

它是List接口的傳統實現。整個集合框架已被實現爲默認情況下不是線程安全的。如果您需要線程安全性,則可以使用適當的Collections.synchronizedXXX()方法來包裝任何非踩踏安全實現,例如XXXListMap或。這同樣適用於HashTable,它也默認同步。您應該使用HashMap,而不是Collections.synchonizedMap()

相關問題