一篇搞定Java集合類原理
阿新 • • 發佈:2020-11-04
## Java集合類實現原理
### 1.Iterable介面
- 定義了迭代集合的迭代方法
```java
iterator()
forEach() 對1.8的Lambda表示式提供了支援
```
### 2. Collection介面
- 定義了集合新增的通用方法
```java
int size();
boolean isEmpty();
boolean contains();
boolean add()
boolean addAll()
boolean remove()
removeAll()
Object[] toArray()
```
### 3.List介面
- 元素被新增到集合中以後,取出的時候是按照放入順序。
- `List`可以重複。
- 存在下標,可以直接依靠下標取值
```java
E get()
E set()
E indexOf()
int lastIndexOf()
ListIterator listIterator()
```
#### 3.1 ArrayList類
- 底層是一個`Object`陣列。
```java
transient Object[] elementData; // non-private to simplify nested class access
```
- 初始容量為10
```java
private static final int DEFAULT_CAPACITY = 10;
```
- 當陣列容量不夠是自動擴容為以前的1.5倍
```java
private int newCapacity(int minCapacity) {
// overflow-conscious code
int oldCapacity = elementData.length;
int newCapacity = oldCapacity + (oldCapacity >> 1);
```
- 陣列最大容量為`Integer.MAX_VALUE-8`
```java
private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;
```
- 執行緒不安全
#### 3.2.Vector類(不常用)
- 底層是一個`Object`陣列
```java
protected Object[] elementData;
```
- 初始容量為10
```java
public Vector() {
this(10);
}
```
- 陣列容量不夠的時候自動擴容為原來的一倍
```java
int oldCapacity = elementData.length;
int newCapacity = oldCapacity + ((capacityIncrement > 0) ?
capacityIncrement : oldCapacity);
```
- 陣列最大容量為
```java
private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;
```
- 執行緒安全
#### 3.3 LinkedList
- 底層是一個列表
```java
/**
* Pointer to first node.
*/
transi