Java集合面試題彙總篇
阿新 • • 發佈:2020-05-07
> 文章收錄在 GitHub [JavaKeeper](https://github.com/Jstarfish/JavaKeeper) ,N線網際網路開發必備技能兵器譜
作為一位小菜 ”一面面試官“,面試過程中,我肯定會問 Java 集合的內容,同時作為求職者,也肯定會被問到集合,所以整理下 Java 集合面試題
![](https://i02piccdn.sogoucdn.com/fe487f455e5b1eb6)
> 說說常見的集合有哪些吧?
>
> HashMap說一下,其中的Key需要重寫hashCode()和equals()嗎?
>
> HashMap中key和value可以為null嗎?允許幾個為null呀?
>
> HashMap執行緒安全嗎?ConcurrentHashMap和hashTable有什麼區別?
>
> List和Set說一下,現在有一個ArrayList,對其中的所有元素按照某一屬性大小排序,應該怎麼做?
>
> ArrayList 和 Vector 的區別
>
> list 可以刪除嗎,遍歷的時候可以刪除嗎,為什麼
面嚮物件語言對事物的體現都是以物件的形式,所以為了方便對多個物件的操作,需要將物件進行儲存,集合就是儲存物件最常用的一種方式,也叫容器。
![img](https://tva1.sinaimg.cn/large/00831rSTly1gdp03vldkkg30hv0gzwet.gif)
從上面的集合框架圖可以看到,Java 集合框架主要包括兩種型別的容器
- 一種是集合(Collection),儲存一個元素集合
- 另一種是圖(Map),儲存鍵/值對對映。
Collection 介面又有 3 種子型別,List、Set 和 Queue,再下面是一些抽象類,最後是具體實現類,常用的有 ArrayList、LinkedList、HashSet、LinkedHashSet、HashMap、LinkedHashMap 等等。
集合框架是一個用來代表和操縱集合的統一架構。所有的集合框架都包含如下內容:
- **介面**:是代表集合的抽象資料型別。例如 Collection、List、Set、Map 等。之所以定義多個介面,是為了以不同的方式操作集合物件
- **實現(類)**:是集合介面的具體實現。從本質上講,它們是可重複使用的資料結構,例如:ArrayList、LinkedList、HashSet、HashMap。
- **演算法**:是實現集合介面的物件裡的方法執行的一些有用的計算,例如:搜尋和排序。這些演算法被稱為多型,那是因為相同的方法可以在相似的介面上有著不同的實現。
------
## 說說常用的集合有哪些吧?
Map 介面和 Collection 介面是所有集合框架的父介面:
1. Collection介面的子介面包括:Set、List、Queue
2. List是有序的允許有重複元素的Collection,實現類主要有:ArrayList、LinkedList、Stack以及Vector等
3. Set是一種不包含重複元素且無序的Collection,實現類主要有:HashSet、TreeSet、LinkedHashSet等
4. Map沒有繼承Collection介面,Map提供key到value的對映。實現類主要有:HashMap、TreeMap、Hashtable、ConcurrentHashMap 以及 Properties 等
## ArrayList 和 Vector 的區別
相同點:
- ArrayList 和 Vector 都是繼承了相同的父類和實現了相同的介面(都實現了List,有序、允許重複和null)
```java
extends Abst