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萬以上時,初始化容量方法效率會下降