吊打面試官!Java集合/泛型 24 道題,你能答對多少?

Java集合/泛型面試題

1、ArrayLi st和1 inkedList的區別
2、HashMap和HashT able的區別
3、Collecti on包結構,與Collecti ons的區別
4、泛型常用特點(待補充)
5、說說List, Set, Map三者的區別
6、Arr ay與ArrayList有什麼不一樣?
7、Map有什麼特點
8、集合類存放於Java. util 包中,主要有幾種接口
9、什麼是1ist接口
10、說說ArrayList (數組)
11、Vector (數組實現、線程同步)
12、說說LinkList (鏈表)
13、什麼Set集合
14、HashSet ( Hash 表)
15、什麼是TreeSet (二又樹)
16、說說LinlkHashSet ( HashSet+Li ruke aHashMap)
17、HashMap (數組+鏈表+紅黑樹)
18、說說Concur entHashMlap
19、HashTable (線程安全)
20、Trellap (可排序)
21、LinHashMap (記錄插入順序)
22、泛型類
23、類型通配符?
24、類型擦除

1、ArrayList和linkedList的區別

Array(數組)是基於索引index)的數據結構,它使用索引在數組中搜索和讀取數據是很快的。
Array獲取數據的時間複雜度是0(1 ),但是要刪除數據卻是開銷很大,因爲這需要重排數組中的所有數據,(因爲刪除數據以後,需要把後面所有的數據前移)
缺點:數組初始化必須指定初始化的長度否則報錯
例如:

int[] a = new int[4];//推薦使用int[]這種方式初始化
int c[] = {23,43, 56,78};//長度: 4,索引範圍: [0,3]

List-是一一個有序的集合,可以包含重複的元素, 提供了按索引訪問的方式,它繼承Collection.
List有兩個重要的實現類: ArrayList和LinkedList
ArrayList可以看作是能夠自動增長容量的數組
ArrayList的toArray方法返回一-個數組
ArrayList的asList方法返回- -個列表
ArrayList底層的實現是Array,數組擴容實現
LinkList是一一個雙鏈表在添加和刪除元素時具有比ArrayList更好的性能但在get與set方面弱於
ArrayLlist.當然這些對比都是指數據量很大或者操作很頻繁。

2、HashMap和HashTable的區別

1.兩者父類不同
HashMap是繼承自AbstractMap類,而Hashtable是繼承自Dictionary類。不過它們都實現了同時實現了map、Cloneable (可複製)、Serializable (可序列化)這三個接口。

2.對外提供的接口不同
Hashtable比HashMap多提供了elments()和contains(兩個方法。
elments()方法繼承自Hashtable的父類Dictionnary. elements() 方法用於返回此Hashtable中的value的枚舉。
contains0方法判斷該Hashtable是否包含傳入的value.它的作用與containsValue()-致.事實上,contansValue0就只是調用了一下contains0 方法。

3.對null的支持不同
Hashtable : key和value都不能爲null.
HashMap : key可以爲null ,但是這樣的key只能有一個,因爲必須保證key的唯-一性;可以有多個key值對應的value爲null.

4.安全性不同
HashMap是線程不安全的,在多線程併發的環境下,可能會產生死鎖等問題,因此需要開發人員自己處理多線程的安全問題。
Hashtable是線程安全的,它的每個方法上都有synchronized關鍵字,因此可直接用於多線程中。
雖然HashMap是線程不安全的,但是它的效率遠遠高於Hashtable ,這樣設計是合理的,因爲大部分的使用場景都是單線程。當需要多線程操作的時候可以使用線程安全的ConcurrentHashMap.
ConcurrentHashMap.雖然也是線程安全的,但是它的效率比Hashtable要高好多倍。因爲ConcurrentHashMap使用了分段鎖,並不對整個數據進行鎖定。

5、初始容量大小和每次擴充容量大小不同

6、計算hash值的方法不同

3. Collection包結構 ,與Collections的區別

Collection是集合類的上級接口,子接口有Set. List. LinkedList. ArrayLlist. Vector. Stack. Set ;
Colletions是集合類的一個幫助類,它包含有各種有關集合操作的靜態多態方法,用於實現對各種集合的搜索、排序.線程安全化等操作。此類不能實例化,就像一 個工具類,服務於Java的Collection框架。

4、泛型常用特點(待補充)

泛型是ava SE 1.5之後的特性,《Java 核心技術》中對泛型的定義是:
“泛型“意味着編寫的代碼可以被不同類型的對象所重用。
“泛型”,顧名思義,“泛指的類型”。我們提供了泛指的概念, 但具體執行的時候卻可以有具體的規則來約束,比如我們用的非常多的ArrayList就是個泛型類, ArrayLit作爲集合可以存放各種元素,如Integer, String ,自定義的各種類型等,但在我們使用的時候通過具體的規則來約束,如我們可以約束集合中只存放Integer類型的元素,如

List<Integer> iniData = new ArrayList<()

使用泛型的好處?
以集合來舉例,使用泛型的好處是我們不必因爲添加元索類型的不同而定義不同類型的集合,如整型集
合類,浮點型集合類,字符串集合類,我們可以定義-一個集合來存放整型、浮點型,字符串型數據,而
這並不是最重要的,因爲我們只要把底層存儲設置了0bject即可,添加的數據全部都可向上轉型爲
Object。更重要的是我們可以通過規則按照自己的想法控制存儲的數據類型。

5.說說List,Set,Map三者的區別

List對付順序的好幫手) : List接口存儲-組不唯- - (可以有多個元索引用相同的對象) , 有序的對象Set注重獨一無二的性質)不允許重複的集合。不會有多個元索引用相同的對象。
Map(用Key來搜索的專):使用鍵值對存儲。Map會維護與Key有關聯的值。兩個Key可以引用相同的對象,但Key不能重複,典型的Key是String類型,但也可以是任何對象。

6、Array與ArrayList有什麼不一 樣?

Array與ArrayLis都是用來存儲數據的集合。ArrayList底層是使用數組實現的 ,但是arrayList對數組進行了封裝和功能擴展, 擁有許多原生數組沒有的一些功能。我們可以理解成ArrayList是Array的一 個升級版。

以上的面試題都已整理成冊,可以關注我的公衆號《老男孩的架構路》領取一線大廠Java面試題總結+各知識點學習思維導圖+一份400頁pdf文檔的Java獨家面試手冊!

這些資料的內容都是面試時面試官必問的知識點,篇章包括了很多知識點,其中包括了有基礎知識、Java集合、JVM、多線程併發、spring原理、微服務、Netty 與RPC 、Kafka、日記、設計模式、Java算法、數據庫、Zookeeper、分佈式緩存、數據結構等等。

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