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方法。


