【Java核心面試寶典】Day15、“Java容器”高頻面試題總結!???
Hello,你好呀,我是灰小猿!一個超會寫bug的程序猿!
用堅持締造技術、用指尖敲動未來!
和很多小伙伴們一樣,我也是一名奔波在Java道路上的“創造者”。也想靠技術來改未來,改變世界!因為我們堅信每一次敲動鍵盤都能讓生活變得更智能、世界變得更有趣!
在此專欄《Java核心面試寶典》記錄我們備戰夢想的【day 15】!
集合、數組這些內容都是我們日常開發最常用到的東西,但是其中有很多能夠被面試官拿來當做考察點的內容你知道嘛?今天就和小伙伴們剖析一下在容器的相關內容中,都會有哪些常見的面試題呢?
1、Iterable和Iterator接口的作用分別是什么?
Iterable接口的作用是使容器具備迭代元素的功能,如果一個容器類實現了Iterable接口,則該容器類的實例就具備了迭代元素的功能。
Iterator接口的作用是迭代器,其作用是迭代容器中的元素。
2、Iterable接口的核心方法是什么?該方法的返回值類型是什么?
Iterable接口的核心方法是iterator,該方法返回迭代器的實例,返回值類型是Iterator。
3、如何實現在遍歷過程中刪除元素?
為了實現在遍歷中刪除元素,最好的做法是使用迭代器進行元素遍歷,當遇到需要刪除的元素時,調用方法remove可以刪除元素,并且不會出現錯誤。
4、Collection接口繼承了哪個接口?
Collection接口繼承了Iterable接口,
關于容器中接口的繼承和實現關系,可以看下面這張圖:
5、Collection接口中的哪三個方法分別和集合的并集、差集、交集運算相似?
方法addAll和集合的并集運算相似,它的作用是一次將另一個容器中的元素全部添加到當前容器中。
方法removeAll和集合的差集運算相似,它的作用是一次將另一個容器中的全部元素從當前容器中刪除,
方法retainAll和集合的交集運算相似,它的作用是保留既在當前容器中又在另一個容器中的元素。
6、Collection接口的兩個子接口List和Set有什么不同?
List是線性表,存儲一組順序排列的元素,==允許元素重復==;
Set是集合,存儲一組互不相同的元素,==不允許元素重復==。
7、ListIterator類型的迭代器和Iterator類型的迭代器有什么區別?
Iterator類型的迭代器只支持單向遍歷,ListIterator類型的迭代器支持雙向遍歷。
8、ArrayList和LinkedList的主要區別是什么?從底層實現、隨機訪問元素、插入和刪除元素方面回答?
ArrayList的底層實現是數組,LinkedList的底層實現是雙向鏈表,
ArrayList可以快速訪問指定下標處的元素。LinkedList需要遍歷元素才能得到指定下標處的元素。ArrayList插入和刪除元素時需要移動其他元素(除了在尾部插入和刪除元素的情況),
LinkedList可以快速插入和刪除元素,但是在指定位置(除了頭部和尾部)插入和刪除元素時則需要首先遍歷元素到指定位置。
9、ArrayList和Vector的主要區別是什么?什么情況下使用 ArrayList 比使用 Vector 更好?
ArrayList和Vector的主要區別是,Vector的所有方法都是同步的,因此可以保證線程安全。而ArrayList不能保證線程安全。
在不需要保證線程安全的情況下,使用 ArrayList 比使用 Vector 效率更高。
10、Map中,鍵能否重復?如果重復,會有什么現象?
Map中不允許鍵重復,因為每一個鍵對應一個值,如果有重復的鍵,則會出現一個鍵對應多個值的情況,這違背了映射的定義。
11、HashMap和Hashtable的區別有哪些?
==HashMap 不是線程安全的,Hashtable 是線程安全的;== HashMap 的效率高于 Hashtable;
HashMap 允許鍵或值為 null,最多可以有一個鍵為 null,Hashtable 不允許鍵或值為 null;
從 JDK 1.8 開始,HashMap 的實現包括紅黑樹,Hashtable 則沒有這樣的機制。
12、從JDK1.8之后,HashMap的實現有什么變化?
JDK 1.8 之前的 HashMap 的底層通過數組和鏈表實現,如果出現沖突則通過拉鏈法解決沖突。
JDK 1.8 在解決沖突時的實現有較大變化,當鏈表長度大于閾值(默認為 8)時,將鏈表轉化為紅黑樹。這便是“==樹化==”, 當鏈表長度小于6時,會重新形成鏈表,這個過程稱為“==鏈化==”。
關于HashMap底層實現的深入探究,小伙伴們可以看這一篇《【Java核心面試寶典】Day3、圖解HashMap高頻面試及底層實現架構!》。
13、HashSet和TreeSet有什么區別?
HashSet 的底層實現基于 HashMap,元素是無序的,通過方法 hashCode 和equals 保證元素沒有重復;
TreeSet 的底層實現基于 TreeMap,元素是有序的,通過 Comparable 接口或 Comparator接口保證元素沒有重復。
今日總結
集合和容器相關的內容雖然經常用,但是我們可以看出能出的面試題其實一點都不少,這里面的很多都是重點,比如HashMap的底層實現、列表接口的繼承關系、實現原理等。
這方面的題目還有很多,所以如果小伙伴們有遇到其他相關的面試題,歡迎在評論區留言提出,我會把大家提出的總結到文章內`, 歡迎小伙伴們一起評論區打卡學習!小伙伴們可也在左方加我好友一起探討學習!
我是==灰小猿==,我們下期見!
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。