1.ArrayList、Vector、LinkedList、HashSet、TreeSet、HashMap、TreeMap的區別
Collection中包含了List和Set
List:分為ArrayList、Vector、LinkedList,是有序可重復的集合
ArrayList:陣列,查詢快,增刪慢,執行緒不安全,效率高,擴容增長為原來的1.5倍
Vector:陣列,查詢快,增刪慢,執行緒安全,效率低,擴容為原來的2倍
LinkedList:鏈表,查詢慢,增刪快,執行緒不安全,效率高
Set:HashSet、TreeSet,是無序不可重復的集合,存的話相同的值會添加失敗,取值通過迭代遍歷獲取
HashSet:執行緒不安全,效率高,底層采用了Map
TreeSet:執行緒安全,效率低
Map:采用Key-Value存盤值
HashMap:Key不可重復,value可以重復,執行緒不安全,效率高,允許value中為null
TreeMao:執行緒安全,效率低,不允許value中有null
以上的執行緒不安全可以通過Collections類的synchronized方法來轉為執行緒安全
2.==和equals的區別
是比較兩個變數的值是否相等,比較記憶體中存盤的值是否相等,如果是基本型別只能用比較,如果是物件,則比較地址值是否相等
equals是比較兩個獨立物件的內容是否相等,不是比較地址值,是比較內容
3.hashMap底層原理說明
1.8后采用陣列鏈表加紅黑樹的組合,原始桶數為16,節點上含有hashCode,key,value,next四個內容
1.當存一個key-value時,首先計算key的hashCode,然后做位與運算,計算出陣列下標,判斷該陣列是否存有內容;
2.如果該位置沒有值,可以直接將值存入
3.如果該位置有值,判斷key值是否一致,
4.如果key值一致,覆寫原來key對應的value值,
5.如果key不一致,轉為鏈表結構,鏈接到陣列下面,判斷陣列的長度
6.如果長度小于8,則開始本輪添加結束
7.如果長度大于等于8,陣列擴容,變為原來的2倍,重新計算存盤資訊
8.如果陣列長度大于64,且鏈表長度大于等于8,鏈表開始變為紅黑樹,如果長度小于6,紅黑樹轉為鏈表
9.如果陣列長度大于等于0.75倍的陣列長度,陣列擴容,如果長度為64,開始放入鏈表
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/245786.html
標籤:其他
下一篇:李哥牛逼嗎
