網站首頁 健康小知識 母嬰教育 起名 運動知識 職場理財 情感生活 綠色生活 遊戲數碼 美容 特色美食 愛好

Java集合面試題:[1]集合面試題、Java集合

欄目: 職場就業 / 發佈於: / 人氣:1.49W

包中就包含了一系列重要的集合類,而對於集合類,主要需要掌握的就是它的內部結構,以及遍歷集合的迭代模式。
Java2的集合框架,抽其核心,主要有三種:List、Set和Map。
如下圖所示:

Java集合面試題:[1]集合面試題、Java集合
Java集合面試題:[1]集合面試題、Java集合 第2張

操作方法

(01)集合類特性(幾個常用類的區別)ArrayList:元素單個,效率高,多用於查詢Vector:元素單個,線程安全,多用於查詢LinkedList:元素單個,多用於插入和刪除HashMap:元素成對,元素可為空HashTable:元素成對,線程安全,元素不可為空WeakHashMap:是一種改進的HashMap,它對key實行“弱引用”,如果一個key不再被外部所引用,那麼該key可以被GC回收

(02)Iterator 是什麼一些集合類提供了內容遍歷的功能,通過ator接口。這些接口允許遍歷對象的集合。依次操作每個元素對象。當使用Iterators時,在獲得Iterator的時候包含一個集合快照。通常在遍歷一個Iterator的時候不建議修改集合本省。Iterator與ListIterator有什麼區別ator可用來遍歷Set和List集合,但是ListIterator只能用來遍歷List。 ator只能正向遍歷集合,適用於獲取移除元素。ListIerator繼承Iterator,可以雙向列表的遍歷,同樣支持元素的修改。比如:增加元素,替換元素,獲取前一個和後一個元素的索引,等等。

(03)Collection 和 Collections的區別Collection是集合類的上級接口,繼承與他的接口主要有Set 和ections是針對集合類的一個幫助類,他提供一系列靜態方法實現對各種集合的搜索、排序、線程安全化等操作List、Map、Set三個接口,存取元素時,各有什麼特點List以特定次序來持有元素,可有重複元素;Set無法擁有重複元素,內部排序(無序);Map保存key-value值,value可多值。

Java集合面試題:[1]集合面試題、Java集合 第3張

(04)HashMap和Hashtable的區別都屬於Map接口的類,實現了將惟一鍵映射到特定的值上。一.歷史原因:Hashtable是基於陳舊的Dictionary類的,HashMap是Java 1.2引進的Map接口的一個實現二.同步性:Hashtable是線程安全的,也就是説是同步的,而HashMap是線程序不安全的,不是同步的三.值:HashMap 類沒有分類或者排序。它允許一個 null 鍵和多個 null 值。Hashtable 類似於 HashMap,但是不允許 null 鍵和 null 值。四.效率:Hashtable 比 HashMap 慢,因為它是同步的。怎樣使HashMap同步HashMap可以通過Map m = hronizedMap(hashMap)來達到同步的效果。

(05)ArrayList和Vector的區別ArrayList與Vector主要從二方面來説.一.同步性:Vector是線程安全的,也就是説是同步的,而ArrayList是線程序不安全的,不是同步的。二.操作:由於Vector支持多線程操作,所以在性能上就比不上ArrayList了。三.數據增長:ArrayList和Vector都有一個初始的容量大小,當存儲進去它們裏面的元素個數超出容量的時候,就需要增加ArrayList和Vector的存儲空間,每次增加存儲空間的時候不是隻增加一個存儲單元,是增加多個存儲單元。Vector默認增加原來的一倍,ArrayList默認增加原來的0.5倍。Vector可以由我們自己來設置增長的大小,ArrayList沒有提供相關的方法。LinkedList與ArrayList有什麼區別兩者都實現的是List接口,不同之處在於:(1)、ArrayList是基於動態數組實現的,LinkedList是基於鏈表的數據結構。(2)、get訪問List內部任意元素時,ArrayList的性能要比LinkedList性能好。LinkedList中的get方法是要按照順序從列表的一端開始檢查,直到另一端(3)、對於新增和刪除操作LinkedList要強於ArrayList,因為ArrayList要移動數據附加:LinkedList實現了List接口,允許null元素。此外LinkedList提供額外的get,remove,insert方法在LinkedList的首部或尾部。這些操作使LinkedList可被用作堆疊(stack),隊列(queue)或雙向隊列(deque)。注意LinkedList沒有同步方法。如果多個線程同時訪問一個List,則必須自己實現訪問同步。一種解決方法是在創建List時構造一個同步的List:List list = hronizedList(new LinkedList(…));

(06)數組(Array)和列表集合(ArrayList)有什麼區別下面列出了Array和ArrayList的不同點:Array可以包含基本類型和對象類型,ArrayList只能包含對象類型。Array大小是固定的,ArrayList的大小是動態變化的。ArrayList提供了更多的方法和特性,比如:addAll(),removeAll(),iterator()  等等。對於基本類型數據,集合使用自動裝箱來減少編碼工作量。但是,當處理固定大小的基本數據類型的時候,這種方式相對比較慢。Enumeration接口和Iterator接口的區別有哪些Enumeration速度是Iterator的2倍,同時佔用更少的內存。但是,Iterator遠遠比Enumeration安全,因為其他線程不能夠修改正在被iterator遍歷的集合裏面的對象。同時,Iterator允許調用者刪除底層集合裏面的元素,這對Enumeration來説是不可能的。

(07)HashSet和TreeSet有什麼區別HashSet有以下特點:A. 無序(不能保證元素的排列順序,順序有可能發生變化)B. 不同步C. 允許空值(集合元素可以是null,可以放入多個null,但會自動覆蓋)當向HashSet結合中存入一個元素時,HashSet會調用該對象的hashCode()方法來得到該對象的hashCode值,然後根據 hashCode值來決定該對象在HashSet中存儲位置。簡單的説,HashSet集合判斷兩個元素相等的標準是兩個對象通過equals方法比較相等,並且兩個對象的hashCode()方法返回值相 等注意,如果要把一個對象放入HashSet中,重寫該對象對應類的equals方法,也應該重寫其hashCode()方法。其規則是如果兩個對象通過equals方法比較返回true時,其hashCode也應該相同。另外,對象中用作equals比較標準的屬性,都應該用來計算 hashCode的值。TreeSet有以下特點:A. 有序1. TreeSet是由一個樹形的結構來實現的(數據結構是二叉樹),它裏面元            素是有序的Set是SortedSet接口的唯一實現類,TreeSet可以確保集合元素處於           排序狀 態,支持兩種排序方式,自然排序和定製排序。其中自然排序為             默認的排序方式;定製排序,TreeSet中的對象元素需要實Comparable             接口TreeSet類中跟HashSet類一樣也沒有get()方法來獲取列表中的元素,所以      也只能通過迭代器方法來獲取二叉樹:B. 不允許空值1. HashSet是通過HashMap實現的,TreeSet是通過TreeMap實現的,只不過            Set用的只是Map的key2. Map的key和Set都有一個共同的特性就是集合的唯一性Map更是              多 了一個有序性.3. TreeSet類中跟HashSet類一樣也沒有get()方法來獲取列表中的元素,所            以也只能通過迭代器方法來獲取4. HashSet是基於hash算法實現的,性能優於TreeSet,通常使用                        HashSet。在我們需要對其中元素排序的時候才使用TreeSet。

Java集合面試題:[1]集合面試題、Java集合 第4張

(08)HashMap,LinkedMap,TreeMap的區別HashMap,LinkedHashMap,TreeMap都屬於Map。LinkedHashMap是HashMap的子類。Map 主要用於存儲鍵(key)值(value)對,根據鍵得到值,因此鍵不允許鍵重複,但允許值重複Map的內部結構是一個數組,線性順序存儲,二次結構使用線性的單鏈表。使用key的hashCode做二次hash之後,再截取小於數組長度的值為索引值。key可以為null,存在索引為0的位置上。由於使用了數組,所以有一個負載因子loadFactor的概念(臨界閾值threshold)和resize。resize比較耗時,衝突時鏈式遍歷查找也比較耗時,所以選定一個合適的初始容易比較重要。存取性能都較高。迭代遍歷時一維使用數組,二維使用鏈表。HashMap是一個最常用的Map,它根據鍵的HashCode 值存儲數據,根據鍵可以直              接獲取它的值,具有很快的訪問速度。HashMap最多隻允許一條記錄的            鍵為Null;允許多條記錄的值為 Null;HashMap不支持線程的同步,即任             一 時刻可以有多個線程同時寫HashMap;可能會導致數據的不一致。如             果需要同步,可以用 Collections的synchronizedMap方法使HashMap           具有同步的能力。edHashMap是HashMap的子類。內部結構是一個數組,線性順序存儲,二次結構使用線性的單鏈表,但同時內部維護了一個雙向循環鏈表,可以保持順序。access-order=false默認為使用新增存儲順序,access-order=true則指定使用讀取和訪問順序。removeEldestEntry=false(當指定為true時,就是實現LRU算法的緩存容器,當然要指定淘汰時的使用頻率和容量上限,其實是一個最近最少使用-->最近使用access-order=true/最新存儲access-order=false)。存取性能較HashMap差-些,但相差不大。r為尾方向,re為首方向。迭代遍歷時entrySet()ator()跟HashMap一樣(有點困惑,為什麼不按線性順序進行迭代,只能重寫entrySet(),keySet()和values()方法)。適用於有緩存設計需求的情況(需繼承)。Map的內部結構是一棵紅黑樹(又叫排序數,是二叉樹的一種),使用鏈式存儲,可以指定比較器Comparator,key需實現Comparable接口。key不能為null。存結點性能稍差,因為需要調整樹結構;取結點用的是鏈表遍歷,但是屬於有序比較,性能中等。迭代遍歷時用的樹的中序遍歷,是一個有序序列。適用於有排序需求的情況。

Tags:面試題 JAVA