更新時間:2020-01-03 15:12:17 來源:動力節(jié)點 瀏覽2850次
1、List、Set、Map是否繼承自Collection接口?
List、Set 是,Map 不是。Map是鍵值對映射容器,與List和Set有明顯的區(qū)別,而Set存儲的零散的元素且不允許有重復元素(數學中的集合也是如此),List是線性結構的容器,適用于按數值索引訪問元素的情形。
2、闡述ArrayList、Vector、LinkedList的存儲性能和特性。
ArrayList 和Vector都是使用數組方式存儲數據,此數組元素數大于實際存儲的數據以便增加和插入元素,它們都允許直接按序號索引元素,但是插入元素要涉及數組元素移動等內存操作,所以索引數據快而插入數據慢。Vector中的方法由于添加了synchronized修飾,因此Vector是線程安全的容器,但性能上較ArrayList差,因此已經是Java中的遺留容器。
LinkedList使用雙向鏈表實現存儲(將內存中零散的內存單元通過附加的引用關聯起來,形成一個可以按序號索引的線性結構,這種鏈式存儲方式與數組的連續(xù)存儲方式相比,內存的利用率更高),按序號索引數據需要進行前向或后向遍歷,但是插入數據時只需要記錄本項的前后項即可,所以插入速度較快。
Vector屬于遺留容器(Java早期的版本中提供的容器,除此之外,Hashtable、Dictionary、BitSet、Stack、Properties都是遺留容器),已經不推薦使用,但是由于ArrayList和LinkedListed都是非線程安全的,如果遇到多個線程操作同一個容器的場景,則可以通過工具類Collections中的synchronizedList方法將其轉換成線程安全的容器后再使用(這是對裝潢模式的應用,將已有對象傳入另一個類的構造器中創(chuàng)建新的對象來增強實現)。
3、Collection和Collections的區(qū)別?
Collection是一個接口,它是Set、List等容器的父接口;Collections是個一個工具類,提供了一系列的靜態(tài)方法來輔助容器操作,這些方法包括對容器的搜索、排序、線程安全化等等。
4、List、Map、Set三個接口存取元素時,各有什么特點?
List以特定索引來存取元素,可以有重復元素。
Set不能存放重復元素(用對象的equals()方法來區(qū)分元素是否重復)。
Map保存鍵值對(key-value pair)映射,映射關系可以是一對一或多對一。
Set和Map容器都有基于哈希存儲和排序樹的兩種實現版本,基于哈希存儲的版本理論存取時間復雜度為O(1),而基于排序樹版本的實現在插入或刪除元素時會按照元素或元素的鍵(key)構成排序樹從而達到排序和去重的效果。
5、List和Set區(qū)別
Set是最簡單的一種集合。集合中的對象不按特定的方式排序,并且沒有重復對象。
HashSet: HashSet類按照哈希算法來存取集合中的對象,存取速度比較快TreeSet :TreeSet類實現了SortedSet接口,能夠對集合中的對象進行排序。
List的特征是其元素以線性方式存儲,集合中可以存放重復對象。
ArrayList() : 代表長度可以改變得數組。可以對元素進行隨機的訪問,向ArrayList()中插入與刪除元素的速度慢。LinkedList(): 在實現中采用鏈表數據結構。插入和刪除速度快,訪問速度慢。
6、LinkedHashMap和PriorityQueue的區(qū)別
PriorityQueue 是一個優(yōu)先級隊列,保證最高或者最低優(yōu)先級的的元素總是在隊列頭部,但是 LinkedHashMap 維持的順序是元素插入的順序。當遍歷一個 PriorityQueue 時,沒有任何順序保證,但是 LinkedHashMap 課保證遍歷順序是元素插入的順序。
7、WeakHashMap與HashMap的區(qū)別是什么?
WeakHashMap 的工作與正常的 HashMap 類似,但是使用弱引用作為 key,意思就是當 key 對象沒有任何引用時,key/value 將會被回收。
8、ArrayList和LinkedList的區(qū)別?
最明顯的區(qū)別是 ArrrayList底層的數據結構是數組,支持隨機訪問,而 LinkedList 的底層數據結構是雙向循環(huán)鏈表,不支持隨機訪問。使用下標訪問一個元素,ArrayList 的時間復雜度是 O(1),而 LinkedList 是 O(n)。
相對于ArrayList,LinkedList的插入,添加,刪除操作速度更快,因為當元素被添加到集合任意位置的時候,不需要像數組那樣重新計算大小或者是更新索引。
LinkedList比ArrayList更占內存,因為LinkedList為每一個節(jié)點存儲了兩個引用,一個指向前一個元素,一個指向下一個元素。
9、ArrayList和Array有什么區(qū)別?
Array可以容納基本類型和對象,而ArrayList只能容納對象。
Array是指定大小的,而ArrayList大小是固定的
10、ArrayList與Vector區(qū)別
ArrayList和Vector在很多時候都很類似。
兩者都是基于索引的,內部由一個數組支持。兩者維護插入的順序,我們可以根據插入順序來獲取元素。ArrayList和Vector的迭代器實現都是fail-fast的。ArrayList和Vector兩者允許null值,也可以使用索引值對元素進行隨機訪問。
以下是ArrayList和Vector的不同點。
Vector是同步的,而ArrayList不是。然而,如果你尋求在迭代的時候對列表進行改變,你應該使用CopyOnWriteArrayList。ArrayList比Vector快,它因為有同步,不會過載。ArrayList更加通用,因為我們可以使用Collections工具類輕易地獲取同步列表和只讀列表。
以上就是動力節(jié)點Java培訓機構小編介紹的“2020年Java繼承面試題”的內容,希望對大家有幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務。
相關推薦
最新最全java面試題及答案(初級到高級)