1. 程式人生 > >一篇搞定Java集合類原理

一篇搞定Java集合類原理

## 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