一、 Array和ArrayList的區別,何時更合適用Arrayjava
a) Array是數組,能夠容納基本類型和對象,而ArrayList是集合,只能容納對象數組
b) Array是指定大小的,而ArrayList的大小是動態的安全
c) Array沒有提供ArrayList那麼多功能,好比addAll、removeAll和iterator等,數據結構
d) 適合用Array的狀況異步
i. 若是列表的大小已經指定,大部分狀況下是儲存和遍歷他們工具
ii. 對於遍歷基本數據類型,儘管Collections使用自動裝箱來減輕編碼任務,在指定大小的基本類型的列表上ArrayList的工做也會變得很慢性能
iii. 若是你須要使用多維數組,使用[ ][ ]比List<List<>>更簡單測試
二、 ArrayList和Vector的區別編碼
1) Vector是線程同步的,全部它也是線程安全的,而ArrayList是線程異步的,是不安全的。若是不考慮到線程的安全因數,通常用ArrayList效率比較高。線程
2) 若是集合中的元素數目大於目前集合數組的長度時,vector增加率爲目前數組長度的100%,而ArrayList增加率爲目前數組長度的50%。在數據量變化比較大的狀況下,用vector有必定優點
三、 ArrayList和LinkedList的區別
a) ArrayList是實現了基於動態數組的數據結構,LinkedList是基於鏈表的數據結構
b) 對於隨機訪問get和set,ArryList要優於LinkedList,由於LinkedList要移動指針
c) 對於新增和刪除操做add和remove,linkedList比較佔優點,由於ArrayList要移動數據。這一點要看實際狀況,若是隻對單條數據插入或刪除,ArrayList的速度反而優於LinkedList。但批量隨機插入,則考慮LinkedList。由於ArrayList每插入一條數據,要移動插入點及以後的全部數據。
四、 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維護排序順序
五、 HashMap和HashTable的區別
a) Hashtable是線程安全的,同步的;而hashMap是線程不安全不一樣步的
b) HashMap容許存在一個null的key,多個null的value;而hashtable的key和value都不容許爲null
六、 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()時是整理了順序的。
)
七、 Set裏的元素是不能重複,那麼用什麼方法來區分重複與否呢?是用==仍是用equals()?
a) Set裏的元素是不能重複的,用equals()方法來區分重複與否;
b) ==:
i. 判斷基本類型時,比較的是 值 是否相同
ii. 引用類型時,比較的是地址是否相同
c) Equals:
i. 只能判斷引用類型,默認狀況下比較的是地址,能夠進行重寫,比較的是:對象的成員變量值是否相同
八、 Collection和Collections的區別:
a) Java..util.Collection是一個接口(集合頂級接口)。它提供了對集合對象進行基本操做的通用接口方法。Collection接口在java類庫中有不少集合的實現,其直接繼承collection接口有List和Set
b) Collections則是集合類的一個工具類,其中提供了一系列靜態方法,用於對集合中元素進行排序、搜索及線程安全等操做。
九、 說出ArrayList、linkedList的存儲性能和特性
a) ArrayList採用的是數組形式來保存對象的,這種方式將對象放在連續的位置中,優勢是索引讀取快,從最後插入和刪除元素速度快,可是頭部插入和刪除速度慢
b) LinkedList使用雙向循環鏈表方式存儲數據,因此頭尾插入或讀取的速度快,而中部插入速度慢
十、 Enumeration和iterator接口的區別
a) Enumeration接口做用與iterator接口類似,但只提供了遍歷vector和hashTable類型集合元素的功能,不支持元素的移除操做
b) Enumeration速度是iterator的2倍,同時佔用更少的內存。可是,iterator遠比enumeration安全,由於其餘線程不可以修改正在被iterator遍歷的集合裏面的對象。同時,iterator容許調用者刪除底層集合裏面的元素。
十一、 Listiterator有什麼特色,與iterator區別
a) Iterator是ListIterator的父類接口
b) Iterator是單列集合(Collection)公共取出容器中元素的方式,而ListIterator是List集合的特有取出元素方式
c) Iterator中具有的功能只有hashNext(),next(),remove();Listiterator中具有着對被遍歷的元素進行增刪查改的方法,能夠對元素進行逆向遍歷。
十二、 Java中HashMap的key值要是爲類對象,則該類須要知足什麼條件?
a) 須要重寫equals()和hashCode()方法
1三、 ArrayList集合加入1萬條數據,應該怎麼提升效率?
a) 直接初始化ArrayList集合的初始化容量爲1萬。但達到100萬以上乃至1000萬以上時,初始化容量方法效率會降低