Java編程基礎學習面試題:HashMap和HashTable的區(qū)別

Java是一種可以撰寫跨平臺應用軟件的面向對象的程序設計語言。Java 技術具有卓越的通用性、高效性、平臺移植性和安全性,廣泛應用于PC、數(shù)據中心、游戲控制臺、科學超級計算機、移動電話和互聯(lián)網,同時擁有全球最大的開發(fā)者專業(yè)社群。

給你學習路線:html-css-js-jq-javase-數(shù)據庫-jsp-servlet-Struts2-hibernate-mybatis-spring4-springmvc-ssh-ssm

小編推薦一個學Java的學習裙【 六五零,五五四,六零七 】,無論你是大牛還是小白,是想轉行還是想入行都可以來了解一起進步一起學習!裙內有開發(fā)工具,很多干貨和技術資料分享!

HashMap和HashTable的區(qū)別

HashMap線程不安全,HashTable是線程安全的。HashMap內部實現(xiàn)沒有任何線程同步相關的代碼,所以相對而言性能要好一點。如果在多線程中使用HashMap需要自己管理線程同步。HashTable大部分對外接口都使用synchronized包裹,所以是線程安全的,但是性能會相對差一些。

二者的基類不一樣。HashMap派生于AbstractMap,HashTable派生于Dictionary。它們都實現(xiàn)Map, Cloneable, Serializable這些接口。AbstractMap中提供的基礎方法更多,并且實現(xiàn)了多個通用的方法,而在Dictionary中只有少量的接口,并且都是abstract類型。

key和value的取值范圍不同。HashMap的key和value都可以為null,但是HashTablekey和value都不能為null。對于HashMap如果get返回null,并不能表明HashMap不存在這個key,如果需要判斷HashMap中是否包含某個key,就需要使用containsKey這個方法來判斷。

算法不一樣。HashMap的initialCapacity為16,而HashTable的initialCapacity為11。HashMap中初始容量必須是2的冪,如果初始化傳入的initialCapacity不是2的冪,將會自動調整為大于出入的initialCapacity最小的2的冪。HashMap使用自己的計算hash的方法(會依賴key的hashCode方法),HashTable則使用key的hashCode方法得到。

小編推薦一個學Java的學習裙【 六五零,五五四,六零七 】,無論你是大牛還是小白,是想轉行還是想入行都可以來了解一起進步一起學習!裙內有開發(fā)工具,很多干貨和技術資料分享!

HashMap數(shù)據結構模型

日常開發(fā)中的使用建議

如果在單線程的環(huán)境中建議使用HashMap,HashMap性能更好一些。

如果是多線程環(huán)境也不建議使用HashTable,而是使用ConcurrentHashMap,ConcurrentHashMap也是線程安全的,并且比HashTable性能好。

HashMap在確定數(shù)據大小的情況想,建議初始化一個合適的容量,否則可能會面resieze,resize操作是一個非常耗時的過程。

如果把自定以的類作為HashMap或者HashTable的key,就需要重寫hashCode和equals方法。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容