導航:首頁 > 編程語言 > java中的hashtable

java中的hashtable

發布時間:2023-06-09 22:04:21

java中的Hashtable怎麼用,請詳細舉例子說明,拜託了 謝謝

就是哈希表,下面這個示例創建了一個數字的哈希表。它將數字的名稱用作鍵: Hashtable<String, Integer> numbers = new Hashtable<String, Integer>();
numbers.put("one", 1);
numbers.put("two", 2);
numbers.put("three", 3);
要獲取一個數字,可以使用以下代碼:
Integer n = numbers.get("two");
if (n != null) {
System.out.println("two = " + n);
}

Ⅱ java中hashtable怎樣存儲數據和讀取數據

Hashtable-哈希表類

以哈希表的形式存儲數據,數據的形式是鍵值對.
特點:
查找速度快,遍歷相對慢
鍵值不能有空指針和重復數據

創建
Hashtable<Integer,String> ht=new
Hashtable<Integer,String>();

添值

ht.put(1,"Andy");
ht.put(2,"Bill");
ht.put(3,"Cindy");
ht.put(4,"Dell");
ht.put(5,"Felex");
ht.put(6,"Edinburg");
ht.put(7,"Green");

取值

String str=ht.get(1);
System.out.println(str);// Andy

對鍵進行遍歷

Iterator it = ht.keySet().iterator();

while (it.hasNext()) {
Integer key = (Integer)it.next();

System.out.println(key);
}

對值進行遍歷

Iterator it = ht.values().iterator();

while (it.hasNext()) {
String value =(String) it.next();

System.out.println(value);
}

取Hashtable記錄數

Hashtable<Integer,String> ht=new Hashtable<Integer,String>();

ht.put(1,"Andy");
ht.put(2,"Bill");
ht.put(3,"Cindy");
ht.put(4,"Dell");
ht.put(5,"Felex");
ht.put(6,"Edinburg");
ht.put(7,"Green");

int i=ht.size();// 7

刪除元素

Hashtable<Integer,String> ht=new Hashtable<Integer,String>();

ht.put(1,"Andy");
ht.put(2,"Bill");
ht.put(3,"Cindy");
ht.put(4,"Dell");
ht.put(5,"Felex");
ht.put(6,"Edinburg");
ht.put(7,"Green");

ht.remove(1);
ht.remove(2);
ht.remove(3);
ht.remove(4);

System.out.println(ht.size());// 3

Iterator it = ht.values().iterator();

while (it.hasNext()) {
// Get value
String value =(String)
it.next();
System.out.println(value);
}

Ⅲ java中Hashtable和HashMap的區別分析

1 HashMap不是線程安全的

hastmap是一個介面 是map介面的子介面,是將鍵映射到值的對象,其中鍵和值都是對象,並且不能包含重復鍵,但可以包含重復值。HashMap允許null key和null value,而hashtable不允許。

2 HashTable是線程安全的一個Collection。

HashMap是Hashtable的輕量級實現(非線程安全的實現),他們都完成了Map介面,主要區別在於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 就必須為之提供外同步。
Hashtable和HashMap採用的hash/rehash演算法都大概一樣,所以性能不會有很大的差異。

public static void main(String args[])
{
HashTable h=new HashTable();
h.put("用戶1",new Integer(90));
h.put("用戶2",new Integer(50));
h.put("用戶3",new Integer(60));
h.put("用戶4",new Integer(70));
h.put("用戶5",new Integer(80));
Enumeration e=h.elements();
while(e.hasMoreElements()){
System.out.println(e.nextElement());
}

map 的方法:

clear()從 Map 中刪除所有映射

remove(Object key)從 Map 中刪除鍵和關聯的值

put(Object key, Object value)將指定值與指定鍵相關聯

get(Object key)返回與指定鍵關聯的值

containsKey(Object key)如果 Map 包含指定鍵的映射,則返回 true

containsValue(Object value)如果此 Map 將一個或多個鍵映射到指定值,則返回 true

isEmpty()如果 Map 不包含鍵-值映射,則返回 true size()返回 Map 中的鍵-值映射的數目

這些都代表了Java中的集合,這里主要從其元素是否有序,是否可重復來進行區別記憶,以便恰當地使用,當然還存在同步方面的差異,見上一篇相關文章。

有序否

允許元素重復否

Collection





List





Set

AbstractSet





HashSet

TreeSet

是(用二叉樹排序)

Map

AbstractMap



使用key-value來映射和存儲數據,Key必須惟一,value可以重復

HashMap

TreeMap

是(用二叉樹排序)

List 介面對Collection進行了簡單的擴充,它的具體實現類常用的有ArrayList和LinkedList。你可以將任何東西放到一個List容器中,並在需要時從中取出。ArrayList從其命名中可以看出它是一種類似數組的形式進行存儲,因此它的隨機訪問速度極快,而LinkedList的內部實現是鏈表,它適合於在鏈表中間需要頻繁進行插入和刪除操作。在具體應用時可以根據需要自由選擇。前面說的Iterator只能對容器進行向前遍歷,而 ListIterator則繼承了Iterator的思想,並提供了對List進行雙向遍歷的方法。

Set介面也是 Collection的一種擴展,而與List不同的時,在Set中的對象元素不能重復,也就是說你不能把同樣的東西兩次放入同一個Set容器中。它的常用具體實現有HashSet和TreeSet類。HashSet能快速定位一個元素,但是你放到HashSet中的對象需要實現hashCode()方法,它使用了前面說過的哈希碼的演算法。而TreeSet則將放入其中的元素按序存放,這就要求你放入其中的對象是可排序的,這就用到了集合框架提供的另外兩個實用類Comparable和Comparator。一個類是可排序的,它就應該實現Comparable介面。有時多個類具有相同的排序演算法,那就不需要在每分別重復定義相同的排序演算法,只要實現Comparator介面即可。集合框架中還有兩個很實用的公用類:Collections和 Arrays。Collections提供了對一個Collection容器進行諸如排序、復制、查找和填充等一些非常有用的方法,Arrays則是對一個數組進行類似的操作。

Map是一種把鍵對象和值對象進行關聯的容器,而一個值對象又可以是一個Map,依次類推,這樣就可形成一個多級映射。對於鍵對象來說,像Set一樣,一個Map容器中的鍵對象不允許重復,這是為了保持查找結果的一致性;如果有兩個鍵對象一樣,那你想得到那個鍵對象所對應的值對象時就有問題了,可能你得到的並不是你想的那個值對象,結果會造成混亂,所以鍵的唯一性很重要,也是符合集合的性質的。當然在使用過程中,某個鍵所對應的值對象可能會發生變化,這時會按照最後一次修改的值對象與鍵對應。對於值對象則沒有唯一性的要求。你可以將任意多個鍵都映射到一個值對象上,這不會發生任何問題(不過對你的使用卻可能會造成不便,你不知道你得到的到底是那一個鍵所對應的值對象)。Map有兩種比較常用的實現: HashMap和TreeMap。HashMap也用到了哈希碼的演算法,以便快速查找一個鍵,TreeMap則是對鍵按序存放,因此它便有一些擴展的方法,比如firstKey(),lastKey()等,你還可以從TreeMap中指定一個范圍以取得其子Map。鍵和值的關聯很簡單,用pub (Object key,Object value)方法即可將一個鍵與一個值對象相關聯。用get(Object key)可得到與此key對象所對應的值對象。

Ⅳ Java中HashMap和Hashtable之間的區別

Hashtable和HashMap類有三個重要的不同之處.第一個不同主要是歷史原因.Hashtable是基於陳舊的Dictionary類的,HashMap是Java 1.2引進的Map介面的一個實現.

也許最重要的不同是Hashtable的方法是同步的,而HashMap的方法不是.這就意味著,雖然你可以不用採取任何特殊的行為就可以在一個多線程的應用程序中用一個Hashtable,但你必須同樣地為一個HashMap提供外同步.一個方便的方法就是利用Collections類的靜態的synchronizedMap()方法,它創建一個線程安全的Map對象,並把它作為一個封裝的對象來返回.這個對象的方法可以讓你同步訪問潛在的HashMap.這么做的結果就是當你不需要同步時,你不能切斷Hashtable中的同步(比如在一個單線程的應用程序中),而且同步增加了很多處理費用.

第三點不同是,只有HashMap可以讓你將空值作為一個表的條目的key或value.HashMap中只有一條記錄可以是一個空的key,但任意數量的條目可以是空的value.這就是說,如果在表中沒有發現搜索鍵,或者如果發現了搜索鍵,但它是一個空的值,那麼get()將返回null.如果有必要,用containKey()方法來區別這兩種情況.

一些資料建議,當需要同步時,用Hashtable,反之用HashMap.但是,因為在需要時,HashMap可以被同步,HashMap的功能比Hashtable的功能更多,而且它不是基於一個陳舊的類的,所以有人認為,在各種情況下,HashMap都優先於Hashtable.

關於Properties
有時侯,你可能想用一個hashtable來映射key的字元串到value的字元串.DOS、Windows和Unix中的環境字元串就有一些例子,如key的字元串PATH被映射到value的字元串C:\WINDOWS;C:\WINDOWS\SYSTEM.Hashtables是表示這些的一個簡單的方法,但Java提供了另外一種方法.

Java.util.Properties類是Hashtable的一個子類,設計用於String keys和values.Properties對象的用法同Hashtable的用法相象,但是類增加了兩個節省時間的方法,你應該知道.

Store()方法把一個Properties對象的內容以一種可讀的形式保存到一個文件中.Load()方法正好相反,用來讀取文件,並設定Properties對象來包含keys和values.

注意,因為Properties擴展了Hashtable,你可以用超類的put()方法來添加不是String對象的keys和values.這是不可取的.另外,如果你將store()用於一個不包含String對象的Properties對象,store()將失敗.作為put()和get()的替代,你應該用setProperty()和getProperty(),它們用String參數.

Ⅳ java中HashMap和HashTable有什麼共同點和區別

HashMap和Hashtable都實現了Map介面,主要的區別有:
1、同步方面:Hashtable的方法是同步的,HashMap未經同步,所以在多線程場合要手動同步HashMap。
2、賦值方面:Hashtable不允許 null 值(key 和 value 都不可以),HashMap允許 null 值(key和value都可以)。
3、遍歷方式不同:Hashtable比HashMap多一個elements方法。
4、動態數組增加方式不同:Hashtable中hash數組默認大小是11,增加的方式是 old*2+1。HashMap中hash數組的默認大小是16,而且一定是2的指數。

閱讀全文

與java中的hashtable相關的資料

熱點內容
承憲的朋友電影 瀏覽:778
農場互助源碼手機版 瀏覽:115
萬安如何使用雲伺服器ip 瀏覽:212
編程語言python入門電子書 瀏覽:401
什麼是民政生存認證app 瀏覽:633
java怎麼退出 瀏覽:903
掛接pdf 瀏覽:166
浪潮伺服器遠程修改bmc地址 瀏覽:120
單立文電影 瀏覽:873
linuxtar命令 瀏覽:876
優酷app如何屏蔽短視頻 瀏覽:480
看著就解壓的軟體 瀏覽:785
android撥號界面源碼 瀏覽:54
在線高清 瀏覽:375
程序員陸漓發型劉海 瀏覽:484
台灣電影《三十兒立》 瀏覽:315
南京學程序員培訓班 瀏覽:267
怎麼把華為手機app密碼刪掉 瀏覽:623
android事件冒泡 瀏覽:685
大片在線高清電影 瀏覽:791