IT十八掌掌第十二天課程總結

今天學完IT十八掌第十二天java基礎課程:


學習內容:

 

spacer.gif

HashMap和HashTable底層都是採用數組+鏈表實現的。

結合了數組的尋址快,鏈表增刪快的特點。使用散列算法(hash算法)將元素分配到數組的元素當中,

hash分區默認16個,每個分區內存儲的是鏈表

1,算出hashcode,進行&0xof取出後四位初步比較,確定分區

2,然後拿對象和鏈表中每個對象相比較,比較每個對象的hash碼是否相同。

spacer.gif

1. 判斷hashcode是否相同

2.判斷是否同一對象或者equals返回true

所以之前的結論:HashSet判斷元素是否相同與元素是否同一對象無關有缺陷,通過查看源代碼

我們知道HashSet底層是採用上述方法判定元素是否相同的。

HashSet底層調用的是HashMap,只關心map的key集合

底層是數組,存儲的鏈表對象。

判斷對象是否重複的方法在下圖中。

所以這裏可以進一步總結HashSet判斷元素是否相同的原理。

首先,判斷hashCode是否相同,否,兩元素不重複;是,進一步判斷

其次,兩個對象是否是同一對象,是,兩元素重複( | | 短路);否,進一步判斷

再次,eauals方法返回true,兩元素重複,返回false,兩元素不重複。

判斷完畢

spacer.gif

二,Collections和Arrays工具類




遇到的問題:

1,  HashMap的entrySet()和keySet()方法遍歷集合。

2, 使用增強for循環迭代集合

3, Debug使用不熟練,

4,線程安全的集合Vector,HashTable使用。

5,hash算法以及HashMap原理實現。



需要幫助的問題

HashMap底層原理以及HashSet的區別與聯繫沒聽懂,對數據結構知識不熟悉

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章