java list 面试题_java【集合】面试题
一、實例化數組后,能不能改變數組的長度?
不能,數組一旦實例化,他們的長度就是固定的。
二、List、Set、Map的區別?
List中的元素:有序,可重復、可為空
set中的元素:無序、不可重復,只有一個可以為空
Map中的元素:無序、鍵不重復,值可以重復,可一個空鍵,一個空值。
三、ArrayList和LinkedList有什么區別?
ArrayList:
底層是動態數組。
Arraylist的默認初始值大小為10,默認擴容大小為1.5倍。
查詢快,增刪慢
LinkedList:
底層是雙向鏈表。
LinkedList將元素添加到鏈表的末尾,無需擴容。
增刪快,查詢慢。
四、如何對list集合進行去重?
1.借助于set集合
2.利用list集合的container方法進行循環遍歷
五、數組和鏈表分別適用于什么場景,為什么?
數組:查詢多,增刪少,數組的特性
鏈表:查詢少,增刪多,鏈表的特性。
六、HashMap的底層結構?
HashMap的底層數據結構為數組+鏈表,在jdk1.8中當鏈表的長度超過8時,鏈表會轉化為紅黑樹。
七、HashMap如何存儲數據?
如果數組還沒有初始化,就創建一個數組,默認長度時16.
將hashmap中的key值取出來,轉化成hash值,然后對數組的長度進行取余操作,然后放在數組對應的位置上。
如果這個鏈表為空,直接插入。
如果鏈表時紅黑樹,而且元素是紅黑樹,則直接插入到其中。
如果是鏈表,則遍歷鏈表,如果有相同的數值,則進行替換,否則直接插入到尾部。
如果鏈表的長度大于等于8,則直接轉換為紅黑樹。
八、hashMap在1.7中和在1.8中的區別?
在1.7的時候,沒有紅黑樹,1.8中引入新特性當鏈表的長度大于8的時候,會轉換成紅黑樹。
在1.7的時候,插入元素,直接插入到頭部,而在1.8的時候,是在尾部進行插入的。
擴容的時候,在1.7的時候,容易出現死循環,而1.8中就不會出現死循環。
九、HashMap和HashTable的區別?
HashMap:
非線程安全
允許由null值
HashMap默認初始化數組的大小為16,擴容時乘以2,使用位運算取得hash
hash特性等原因,所以效率比HashTable高。
HashTable:
線程安全
不允許由null值
hashTable默認初始值為11,擴容機制是乘以2+1,然后進行取模計算。
標簽:黑樹,面試題,java,HashMap,直接插入,鏈表,數組,集合,長度
來源: https://www.cnblogs.com/qingmuchuanqi48/p/13750558.html
總結
以上是生活随笔為你收集整理的java list 面试题_java【集合】面试题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据库的日常管理经验浅谈
- 下一篇: java+mock+例子_java –