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

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

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - Java中Hashtable類與HashMap類的區別詳解

Java中Hashtable類與HashMap類的區別詳解

2020-03-20 13:56hebedich JAVA教程

Hashtable的應用非常廣泛,HashMap是新框架中用來代替Hashtable的類,也就是說建議使用HashMap,不要使用Hashtable。可能你覺得Hashtable很好用,為什么不用呢?這里簡單分析他們的區別。

Hashtable類

Hashtable繼承Map接口,實現一個key-value映射的哈希表。任何非空(non-null)的對象都可作為key或者value。

添加數據使用put(key, value),取出數據使用get(key),這兩個基本操作的時間開銷為常數。

Hashtable通過initial capacity和load factor兩個參數調整性能。通常缺省的load factor 0.75較好地實現了時間和空間的均衡。增大load factor可以節省空間但相應的查找時間將增大,這會影響像get和put這樣的操作。
使用Hashtable的簡單示例如下,將1,2,3放到Hashtable中,他們的key分別是”one”,”two”,”three”:

?
1
2
3
4
Hashtable numbers = new Hashtable();
numbers.put("one", new Integer(1));
numbers.put("two", new Integer(2));
numbers.put("three", new Integer(3));

要取出一個數,比如2,用相應的key:

?
1
2
Integer n = (Integer)numbers.get("two");
System.out.println("two = " + n);

由于作為key的對象將通過計算其散列函數來確定與之對應的value的位置,因此任何作為key的對象都必須實現hashCode和equals方法。hashCode和equals方法繼承自根類Object,如果你用自定義的類當作key的話,要相當小心,按照散列函數的定義,如果兩個對象相同,即obj1.equals(obj2)=true,則它們的hashCode必須相同,但如果兩個對象不同,則它們的hashCode不一定不同,如果兩個不同對象的hashCode相同,這種現象稱為沖突,沖突會導致操作哈希表的時間開銷增大,所以盡量定義好的hashCode()方法,能加快哈希表的操作。

如果相同的對象有不同的hashCode,對哈希表的操作會出現意想不到的結果(期待的get方法返回null),要避免這種問題,只需要牢記一條:要同時復寫equals方法和hashCode方法,而不要只寫其中一個。
Hashtable是同步的。

HashMap類

HashMap和Hashtable類似,不同之處在于HashMap是非同步的,并且允許null,即null value和null key。但是將HashMap視為Collection時(values()方法可返回Collection),其迭代子操作時間開銷和HashMap的容量成比例。因此,如果迭代操作的性能相當重要的話,不要將HashMap的初始化容量設得過高,或者load factor過低。

總結

  1. Hashtable的方法是同步的,HashMap則是非同步的,所以在多線程場合要手動同步HashMap,這個區別就像Vector和ArrayList一樣。
  2. Hashtable不允許null值(key和value都不可以),HashMap允許null值(key和value都可以)。
  3. Hashtable比HashMap多一個elements方法用于遍歷。
  4. Hashtable使用Enumeration,HashMap使用Iterator。
  5. 哈希值的使用不同,Hashtable直接使用對象的hashCode,而HashMap重新計算hash值,而且用與代替求模。
  6. Hashtable中hash數組默認大小是11,增加的方式是 old*2+1。HashMap中hash數組的默認大小是16,而且一定是2的指數。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产综合成色在线视频 | 欧美成人精品第一区二区三区 | 亚洲小视频在线 | 日韩欧美中文字幕一区二区三区 | 成人国产精品一区二区不卡 | 亚洲国产精品一区二区久久 | 青青青国产手机在线播放 | 息与子中文字幕完整在线 | 国产高清在线精品一区二区 | 国产无套在线播放 | 免费视频网 | 操破苍穹h| 欧美一级片免费看 | 欧美伊香蕉久久综合类网站 | 久久久久久久久a免费 | www.毛片网站 | 国产精品视频色拍拍 | re99| 国产探花视频在线观看 | 亚洲成a人片777777久久 | 欧美搞逼视频 | 91视频夜色 | 日本暖暖在线 | 4444亚洲国产成人精品 | 舔小说| 国产精品视频第一页 | 91免费永久国产在线观看 | 操动漫美女视频 | 丰满大屁股美女一级毛片 | 亚洲精品久久久久福利网站 | 国产高清露脸学生在线观看 | 500第一精品 | 日产乱码卡1卡2卡三卡四在线 | 午夜理伦片免费 | 特黄一级大片 | 日本国产一区二区三区 | 娇小老少配xxxxx性视频 | 亚洲欧美日韩天堂 | www.99精品视频在线播放 | 日韩日b视频 | 欧美又黄又激烈真实床戏 |