java集合常見面試題


1、 Array和ArrayList的區別,什么時候更合適用Array

a)      Array是數組,可以容納基本類型和對象,而ArrayList是集合,只能容納對象

b)      Array是指定大小的,而ArrayList的大小是動態的

c)      Array沒有提供ArrayList那么多功能,比如addAll、removeAll和iterator等,

d)      適合用Array的情況

                 i.          如果列表的大小已經指定,大部分情況下是儲存和遍歷他們

                ii.          對於遍歷基本數據類型,盡管Collections使用自動裝箱來減輕編碼任務,在指定大小的基本類型的列表上ArrayList的工作也會變得很慢

               iii.          如果你需要使用多維數組,使用[ ][ ]比List<List<>>更簡單

2、 ArrayList和Vector的區別

1)      Vector是線程同步的,所有它也是線程安全的,而ArrayList是線程異步的,是不安全的。如果不考慮到線程的安全因數,一般用ArrayList效率比較高。

2)      如果集合中的元素數目大於目前集合數組的長度時,vector增長率為目前數組長度的100%,而ArrayList增長率為目前數組長度的50%。在數據量變化比較大的情況下,用vector有一定優勢

3、 ArrayList和LinkedList的區別

a)      ArrayList是實現了基於動態數組的數據結構,LinkedList是基於鏈表的數據結構

b)      對於隨機訪問get和set,ArryList要優於LinkedList,因為LinkedList要移動指針

c)      對於新增和刪除操作add和remove,linkedList比較占優勢,因為ArrayList要移動數據。這一點要看實際情況,如果只對單條數據插入或刪除,ArrayList的速度反而優於LinkedList。但批量隨機插入,則考慮LinkedList。因為ArrayList每插入一條數據,要移動插入點及之后的所有數據。

4、 Lsit、set和map的區別

a)      List (實現了collection接口)

                 i.          可以允許有重復的對象

                ii.          可以插入多個null元素

               iii.          是一個有序容器,保持了每個元素的插入順序

b)      Set(實現了collection接口)

                 i.          不允許重復對象

                ii.          無序的容器,無法保證每個元素的儲存順序;而TreeSet可以通過Comparator或Comparable進行順序排序

               iii.          只允許一個null元素

               iv.          LinkedHashSet按照元素的插入順序對它們進行存儲

c)      Map(不是collection的子接口或實現類。Map是一個接口)

                 i.          Map是以鍵值對的存儲方式存放數據,key是唯一的,value可以重復

                ii.          Map中可以有多個null值,但只能有一個null鍵

               iii.          TreeMap也可以通過comparator或者comparable維護排序順序

5、 HashMap和HashTable的區別

a)      Hashtable是線程安全的,同步的;而hashMap是線程不安全不同步的

b)      HashMap允許存在一個null的key,多個null的value;而hashtable的key和value都不允許為null

6、 HashMap和TreeMap的區別

a)      HashMap通過hashcode對其內容進行快速查找,而TreeMap中所有的元素都保持着某種固定的順序,如果你需要得到一個有序的結果,你就應該使用TreeMap(HashMap中元素排列是無序的)

b)      在Map中插入、刪除和定位元素,HashMap的最好的選擇,但如果您需要按自然順序或自定義順序遍歷Map,那么就使用TreeMap。使用HashMap要求作為key的類中明確重寫了hashCode()和equals()方法。

(兩個map中的元素一樣,但順序不一樣,會導致hashCode()不一樣:

       測試:

       在hashMap中,同樣的值的map,順序不同,equals時為false;

       在treeMap中,同樣的值的map,順序不同,equals時為true,說明treeMap在equals()時是整理了順序的。

7、 Set里的元素是不能重復,那么用什么方法來區分重復與否呢?是用==還是用equals()?

a)      Set里的元素是不能重復的,用equals()方法來區分重復與否;

b)      ==:

                 i.          判斷基本類型時,比較的是 值 是否相同

                ii.          引用類型時,比較的是地址是否相同

c)      Equals:

                 i.          只能判斷引用類型,默認情況下比較的是地址,可以進行重寫,比較的是:對象的成員變量值是否相同

8、 Collection和Collections的區別:

a)      Java..util.Collection是一個接口(集合頂級接口)。它提供了對集合對象進行基本操作的通用接口方法。Collection接口在java類庫中有很多集合的實現,其直接繼承collection接口有List和Set

b)      Collections則是集合類的一個工具類,其中提供了一系列靜態方法,用於對集合中元素進行排序、搜索及線程安全等操作。

9、 說出ArrayList、linkedList的存儲性能和特性

a)      ArrayList采用的是數組形式來保存對象的,這種方式將對象放在連續的位置中,優點是索引讀取快,從最后插入和刪除元素速度快,但是頭部插入和刪除速度慢

b)      LinkedList使用雙向循環鏈表方式存儲數據,所以頭尾插入或讀取的速度快,而中部插入速度慢

10、         Enumeration和iterator接口的區別

a)      Enumeration接口作用與iterator接口相似,但只提供了遍歷vector和hashTable類型集合元素的功能,不支持元素的移除操作

b)      Enumeration速度是iterator的2倍,同時占用更少的內存。但是,iterator遠比enumeration安全,因為其他線程不能夠修改正在被iterator遍歷的集合里面的對象。同時,iterator允許調用者刪除底層集合里面的元素。

11、         Listiterator有什么特點,與iterator區別

a)      Iterator是ListIterator的父類接口

b)      Iterator是單列集合(Collection)公共取出容器中元素的方式,而ListIterator是List集合的特有取出元素方式

c)      Iterator中具備的功能只有hashNext(),next(),remove();Listiterator中具備着對被遍歷的元素進行增刪查改的方法,可以對元素進行逆向遍歷。

12、         Java中HashMap的key值要是為類對象,則該類需要滿足什么條件?

a)      需要重寫equals()和hashCode()方法

13、         ArrayList集合加入1萬條數據,應該怎么提高效率?

a)      直接初始化ArrayList集合的初始化容量為1萬。但達到100萬以上乃至1000萬以上時,初始化容量方法效率會下降


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM