1.JAVA 中數組和集合的區別 ?
(1)數組的長度是固定的,而集合長度是可以改變的。
(2)數組可以儲存基本數據類型和引用數據類型,而集合只能儲存引用數據類型(也就是對象)。
(3)定義數組時必須指出數組元素的類型,而集合默認其中所有元素的類型都是 Object 類型的。
2.Collection 和Collections 的區別 ?
(1)Collection 是集合類的上級接口,繼承于它的接口主要有 Set 和 List。
(2)Collections 是集合類的一個幫助類,它提供一系列靜態方法實現對集合的搜索、排序、線程安全化等操作。
3.List 和 Set 的區別 ?
(1)List 是有序的可重復的集合,而 Set 是無序的不可重復的集合。
(2)List 允許插入多個 Null 值,而 Set 只允許包含一個 Null 值。
4.ArrayList 和 LinkedList 和 Vector 的區別 ?
(1)ArrayList 和 Vector 都是基于動態數組實現的,查詢和修改數據快,而插入和刪除數據慢,ArrayList 是線程
不安全的,Vector 是線程安全的,所以 Vector 的性能比 ArrayList 的性能差。
(2)LinkedList 是基于雙向鏈表實現的,插入和刪除數據快,而查詢和修改數據慢。
5.HashTable 和 HashMap 的比較 ?
(1)HashTable 是線程安全的,而 HashMap 是線程不安全的。
(2)HashTable 不允許有 Null 值 (key 和 value 都不可以為 Null),而 HashMap 允許有 Null 值 (key 和 value 都
可以為 Null)。
(3)HashTable 和 HashMap 的遍歷方式差別不大,HashTable 僅僅比 HashMap 多了一個 elements 方法。
6.HashMap 和 ConcurrentHashMap 區別 ?
(1)HashMap 是線程不安全的,而 ConcurrentHashMap 是線程安全的。
(2)HashMap 不支持線程同步,而 ConcurrentHashMap 采用分段鎖來實現線程同步,類似于多個
HashTable。
7.HashSet 和 TreeSet 的區別 ?
(1)HashSet 是由一個 hash 表來實現的,所以它的元素是無序的。TreeSet 是由一個樹形的結構來實現的,所
以它的元素是有序的。
(2)HashSet 的元素可以為 Null,且只能有一個為 Null,而 TreeSet 的元素都不能為 Null。
(3)HashSet 底層是通過 HashMap 實現的,而 TreeSet 底層是通過 TreeMap 實現的。
8.HashTable 和 HashMap 底層實現原理 ?
(1)HashTable 底層實現原理是基于數組 + 鏈表,默認長度是11,擴容以后長度是 2n + 1。
(2)HashMap 的底層原理:JDK1.7 是數組 + 鏈表,JDK1.8 是數組 + 鏈表 + 紅黑樹,默認長度是16,擴容以后
是兩倍 32,線程不安全,效率高。
9.HashMap 和 LinkedHashMap 的區別 ?
(1)HashMap 是無序的,HashMap 允許多條記錄的值為 Null,但是最多只允許一條記錄的鍵為 Null。
(2)LinkedHashMap 是 HashMap 的子類,是基于 HashMap 和雙向鏈表來實現的, LinkedHashhMap 是有序
的, 它可以保證 HashMap 集合有序,存入的順序和取出的順序是一致的。