【008期】JavaSE面試題(八):集合之List
開篇介紹
大家好,我是Java最全面試題庫
的提褲姐
,今天這篇是面試系列的第八篇,主要總結了JavaSE中集合相關面試題,集合面試分為四篇來講,畢竟是重中之重!這是第一篇,主要是一些基礎的Collection及List相關的面試題,第二篇主要講解Set集合,第三篇和第四篇主要講解Map集合。在後續,會沿著第一篇開篇的知識線路一直總結下去,做到日更!如果我能做到百日百更,希望你也可以跟著百日百刷,一百天養成一個好習慣。
說一下集合的體系?
單列集合:
雙列集合:
Collection 和 Collections的區別?
Collection:
是java.uitl
下的介面
,他是各種集合的父介面,繼承於它的介面主要有set 和list;
Conllecitons:
是個java.util
下的類
,是針對集合的工具類,提供一系列靜態方法對各種集合的搜尋,排序,執行緒安全化等操作。
List a=new ArrayList() 和 ArrayList a =new ArrayList()的區別?
List list = new ArrayList()
;這句建立了一個 ArrayList 的物件後把上溯到了 List。此時它是一個List物件了,有些ArrayList 有但是 List 沒有的屬性和方法,它就不能再用了。
ArrayList list=new ArrayList()
;建立一物件則保留了ArrayList 的所有屬性。所以需要用到 ArrayList 獨有的方法的時候不能用前者。
例項程式碼如下:
List list = new ArrayList();
ArrayList arrayList = new ArrayList();
list.trimToSize(); //錯誤,沒有該方法。
arrayList.trimToSize(); //ArrayList裡有該方法。
Enumeration和iterator介面的區別?
- Enumeration介面作用與iterator介面相似,但只提供了遍歷vector和HashTable型別集合元素的功能,不支援元素的移除操作
- Enumeration速度是iterator的2倍,同時佔用更少的記憶體。但是,iterator遠比enumeration安全,因為其他執行緒不能夠修改正在被iterator遍歷的集合裡面的物件。同時,iterator允許呼叫者刪除底層集合裡面的元素。
ListIterator有什麼特點,與iterator區別?
- Iterator是ListIterator的父類介面
- Iterator是單列集合(Collection)公共取出容器中元素的方式
ListIterator是List集合的特有取出元素方式 - Iterator中具備的功能只有hashNext(),next(),remove();
ListIterator中具備著對被遍歷的元素進行增刪查改的方法,可以對元素進行逆向遍歷。
ArrayList集合加入1萬條資料,應該怎麼提高效率?
直接初始化ArrayList集合的初始化容量為1萬。
但達到100萬以上乃至1000萬以上時,初始化容量方法效率會下降
說一下ArrayList和Vector的擴容?
ArrayList和Vector都有一個初始的容量大小。
ArrayList 是一個可改變大小的陣列,當更多的元素加入到ArrayList中時,其大小將會動態地增長。
內部的元素可以直接通過get與set方法進行訪問,因為ArrayList本質上就是一個數組.
Vector和ArrayList在更多元素新增進來時會請求更大的空間。
Vector每次請求其大小的雙倍空間,而ArrayList每次對size增長50%.(Vector預設增加原來的一倍,ArrayList預設增加原來的0.5倍)
注意:預設情況下ArrayList的初始容量非常小,所以如果可以預估資料量的話,最好分配一個較大的初始值,這樣可以減少調整大小的開銷。