開篇介紹
大家好,我是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的初始容量非常小,所以如果可以預估數據量的話,最好分配一個較大的初始值,這樣可以減少調整大小的開銷。