Java中Hashtable類與HashMap類的差別詳解。本站提示廣大學習愛好者:(Java中Hashtable類與HashMap類的差別詳解)文章只能為提供參考,不一定能成為您想要的結果。以下是Java中Hashtable類與HashMap類的差別詳解正文
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”:
Hashtable numbers = new Hashtable(); numbers.put("one", new Integer(1)); numbers.put("two", new Integer(2)); numbers.put("three", new Integer(3));
要掏出一個數,好比2,用響應的key:
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太低。
總結