Java面試總結——容器

1.Java Collections框架和Collection接口

(1)Java Collections框架中包含了 大量集合接口以及這些接口的實現類和操作它們的算法。具體而言,主要提供了List、Queue、Set、Stack和Map等數據結構。Collections類不能實例化,如同一個工具類,其中提供了一系列靜態方法,用於對幾何中元素進行排序、搜索以及線程安全等各種操作。
①排序(sort)
使用sort方法可以根據元素的自然順序對指定列表按升序進行排序。

Collections.sort(list);

②混排(shuffle)
打亂順序隨機排序

Collections.shuffle(list);

③反轉(reverse)
使用reverse方法可以根據元素的原有順序反轉即可。

Collections.reverse(list);

4.返回Collections中最大、最小元素

Collections.max(list);
Collections.min(list);

(2)Collection(java.util.Collection)是一個集合接口。它提供了對集合對象進行基本操作的通用接口方法。它得作用只是提供維護一組對象的基本接口而已。下面分別介紹Set、List、Map3個接口。
①Set
Set的特點是元素無序,而且不可以重複。該接口有兩個實現類HashSet和TreeSet。
②List
List的特點是按照對象進入的順序保存對象,它可以保存重複的對象。List接口的主要實現類是ArrayList和LinkedList。
③Map
提供了一個鍵映射到值的數據結構。它用於保存鍵值對,其中值可以重複,但鍵是唯一的,不能重複。HashMap是基於散列表實現的,TreeMap基於紅黑樹的數據結構來實現的,內部元素是按需排列的。

2.什麼是迭代器

迭代器(Iterator)是一個對象,它的工作是遍歷並選擇序列中的對象,它提供了一種訪問一個容器對象中各個元素,而又不必暴露該對象內部細節的方法。
迭代器的使用有以下3個注意事項:
(1)使用容器的iterator()方法返回一個Iterator,然後通過Iterator的**next()方法返回第一個元素。
(2)使用Iterator的
hasNext()方法判斷容器是否還有元素,如果有,可以使用next()方法獲取下一個元素。
(3)可以通過
remove()**方法刪除迭代器返回的元素。
Iterator支持派生的兄弟成員。ListIterator只存在於List中,支持在迭代期間向List中添加或刪除元素,並且可以在List中雙向滾動

3.ArrayList、LinkedList和Vector有什麼區別

這三類均在java.util包中,均爲可伸縮數組, ArrayList和Vector都是基於存儲元素Object[] array來實現的,他們會在內存中開闢一塊連續的空間來存儲。他們均支持使用序號(下標)來訪問元素。ArrayList和Vector都有一個初始化的容量大小,當裏面存儲的元素超過初始化大小時,Vector默認擴充爲原來的2倍(擴充空間大小可以設置),ArrayList默認擴充爲原來的1.5倍(擴充大小不可設置)。
(1)synchronization(同步)的使用,ArrayList的方法都不是同步的,Vector的方法是同步的。
(2)線程安全,Vector是線程安全的,ArrayList是線程不安全的。
LinkedList採用雙向列表實現,索引訪問效率低,但是插入效率高,是非線程安全的。

4.HashMap&HashTable&TreeMap&WeakHashMap

java爲數據結構中的映射定義了一個接口java.util.Map,它包括3個實現類:HashMap、Hashtable和TreeMap。Map是用來存儲鍵值對的數據結構,在數組中通過數組下標來對其內容索引的,而在Map中,則是通過對象來進行索引的,用來索引的對象叫做key,其對應的對象叫做value。
(1)HashMap與HashTable的區別

區別 鍵值是否爲空 線程是否安全 迭代類型 判斷是否包含 數組大小 hash值的使用
HashTable 不允許 線程安全 Enumertaion contains 默認大小爲11,增加方式爲old*2+1 直接使用對象的hashCode
HashMap 允許爲空,但是隻能一條記錄健值爲空 線程不安全 Iteration containsvalue、containsKey 默認大小爲16,必須爲2的指數

就效率而言,HashMap可能高於HashTable
HashMap通過
Map m=Collections.synchronizedMap(new HashMap())來達到同步
(2)HashMap和TreeMap有什麼區別
HashMap裏存入的鍵值對在取出時沒有時間固定的順序,是隨機的。一般而言,在Map中插入、刪除和定位元素,HashMap是最好的選擇。由於TreeMap實現了sortMap接口,能夠把它保存的記錄根據鍵排序,因此,取出來的是排序後的鍵值對,如果需要按自然順序或自定義順序遍歷鍵,那麼TreeMap會更好。LinkedHashMap是HashMap的一個子類,如果需要輸出的順序和輸入的相同,那麼用LinkedHashMap可以實現,它還可以按讀取順序來排列。
(3)HashMap與WeakHashMap的區別
WeakHashMap和HashMap類似,二者的不同之處在於WeakHashMap中的key採用的是“弱引用”的方式,只要WeakHashMap中的key不再被外部引用,它就可以被垃圾回收器回收。而HashMap中key採用的是“強引用的方式‘,當HashMap中的key沒有被外部引用時,只有在這個key從HashMap中刪除後,纔可以被垃圾回收器回收。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章