大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java學習 Java集合學習必會的問題(面試官也經常問到)

Java集合學習必會的問題(面試官也經常問到)

更新時間:2019-12-17 16:14:34 來源:動力節點 瀏覽2973次

 

Java集合學習必會的問題(面試官也經常問到)

  說說常見的集合有哪些吧?

  答:Map接口和Collection接口是所有集合框架的父接口:

  Collection接口的子接口包括:Set接口和List接口

  Map接口的實現類主要有:HashMap、TreeMap、Hashtable、ConcurrentHashMap以及Properties等

  Set接口的實現類主要有:HashSet、TreeSet、LinkedHashSet等

  List接口的實現類主要有:ArrayList、LinkedList、Stack以及Vector等

  HashMap與HashTable的區別?

  HashMap沒有考慮同步,是線程不安全的;Hashtable使用了synchronized關鍵字,是線程安全的;

  HashMap允許K/V都為null;后者K/V都不允許為null;

  HashMap繼承自AbstractMap類;而Hashtable繼承自Dictionary類;

  HashMap為什么不直接使用hashCode()處理后的哈希值直接作為table的下標?

  答:hashCode()方法返回的是int整數類型,其范圍為-(2 ^ 31)~(2 ^ 31 - 1),約有40億個映射空間,而HashMap的容量范圍是在16(初始化默認值)~2 ^ 30,HashMap通常情況下是取不到最大值的,并且設備上也難以提供這么多的存儲空間,從而導致通過hashCode()計算出的哈希值可能不在數組大小范圍內,進而無法匹配存儲位置;

  面試官:那怎么解決呢?

  HashMap自己實現了自己的hash()方法,通過兩次擾動使得它自己的哈希值高低位自行進行異或運算,降低哈希碰撞概率也使得數據分布更平均;

  在保證數組長度為2的冪次方的時候,使用hash()運算之后的值與運算(&)(數組長度 - 1)來獲取數組下標的方式進行存儲,這樣一來是比取余操作更加有效率,二來也是因為只有當數組長度為2的冪次方時,h&(length-1)才等價于h%length,三來解決了“哈希值與數組大小范圍不匹配”的問題;

  面試官:為什么數組長度要保證為2的冪次方呢?

  只有當數組長度為2的冪次方時,h&(length-1)才等價于h%length,即實現了key的定位,2的冪次方也可以減少沖突次數,提高HashMap的查詢效率;

  如果 length 為 2 的次冪 則 length-1 轉化為二進制必定是 11111……的形式,在于 h 的二進制與操作效率會非常的快,而且空間不浪費;如果 length 不是 2 的次冪,比如 length 為 15,則 length - 1 為 14,對應的二進制為 1110,在于 h 與操作,最后一位都為 0 ,而 0001,0011,0101,1001,1011,0111,1101 這幾個位置永遠都不能存放元素了,空間浪費相當大,更糟的是這種情況中,數組可以使用的位置比數組長度小了很多,這意味著進一步增加了碰撞的幾率,減慢了查詢的效率!這樣就會造成空間的浪費。

  面試官:那為什么是兩次擾動呢?

  答:這樣就是加大哈希值低位的隨機性,使得分布更均勻,從而提高對應數組存儲下標位置的隨機性&均勻性,最終減少Hash沖突,兩次就夠了,已經達到了高位低位同時參與運算的目的;

  HashMap在JDK1.7和JDK1.8中有哪些不同?

Java集合學習必會的問題(面試官也經常問到)

  為什么HashMap中String、Integer這樣的包裝類適合作為K?

  答:String、Integer等包裝類的特性能夠保證Hash值的不可更改性和計算準確性,能夠有效的減少Hash碰撞的幾率都是final類型,即不可變性,保證key的不可更改性,不會存在獲取hash值不同的情況

  內部已重寫了equals()、hashCode()等方法,遵守了HashMap內部的規范(不清楚可以去上面看看putValue的過程),不容易出現Hash值計算錯誤的情況;

  面試官:如果我想要讓自己的Object作為K應該怎么辦呢?

  答:重寫hashCode()和equals()方法

  重寫hashCode()是因為需要計算存儲數據的存儲位置,需要注意不要試圖從散列碼計算中排除掉一個對象的關鍵部分來提高性能,這樣雖然能更快但可能會導致更多的Hash碰撞;

  重寫equals()方法,需要遵守自反性、對稱性、傳遞性、一致性以及對于任何非null的引用值x,x.equals(null)必須返回false的這幾個特性,目的是為了保證key在哈希表中的唯一性;

Java集合學習必會的問題(面試官也經常問到)

      以上就是動力節點Java培訓機構小編介紹的“Java集合學習必會的問題(面試官也經常問到)”的內容,希望對大家有幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。

 

相關推薦

最新最全java面試題及答案(初級到高級)

史上最全的中高級JAVA工程師面試題及答案匯總

Java高級開發工程師面試題

2019史上最全java面試題題庫大全800題

哪有資深java工程師面試題

 

 

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 99涩涩| 外国成人网在线观看免费视频 | 国产精品久久久久aaaa | 在线观看日本免费不卡 | 9久9久女女热精品视频免费观看 | 欧美日韩顶级毛片www免费看 | 免费在线中文字幕 | 波多野结衣一区二区三区 | www.婷婷色| 欧美天天干 | 在线成人爽a毛片免费软件 在线成人天天鲁夜啪视频 在线成人亚洲 | 色综合视频一区二区三区 | 99久久精品国产一区二区成人 | 四虎影院永久免费观看 | 久久成人视 | 日本在线有码 | 91视频福利 | 99视频一区 | 日韩精品中文字幕一区二区三区 | 色操网| 国产a精品 | 国产日产久久高清欧美一区 | 四虎永久免费观看紧急入口 | 亚洲福利影院 | 国产麻豆视频在线看网站 | 伊人骚| 九九性视频 | 亚洲人成在线免费观看 | 久久精品94精品久久精品 | 97夜夜操| 免费观看羞羞视频网站 | 中文字幕精品视频在线观看 | 国产欧美在线观看视频 | 日本xxx高清免费视频 | 日韩中文字幕高清在线专区 | 日本手机在线视频 | 久草精品在线观看 | 日韩美女va在线毛片免费知 | 五月综合激情视频在线观看 | 99久久国产综合精品网成人影院 | 老子影院午夜伦手机不卡6080 |