天天看點

ArrayList源碼了解

參看:https://www.cnblogs.com/skywang12345/p/3308556.html

List比Collection多了indexOf()、lastIndexOf()、set()、get()方法

ArrayList源碼了解
  • AbstractList類提供了Collection接口的骨架實作,以減少實作此接口的工作量。為了實作一個不可修改的集合,程式員隻需擴充這個類并提供此iterator和size方法實作。要實作可修改的集合,程式員必須要覆寫此類的add方法。
  • Cloneable接口:一個類實作Cloneable接口,訓示Object.clone()方法可以用于對該類的執行個體進行現場複制是合法的。若在沒有實作Cloneable接口的上調用對象的克隆方法導緻抛出異常CloneNotSupportException。
  • RandomAccess接口:是一個标志接口(Marker),表明其支援快速通路。具體參看部落格 https://blog.csdn.net/weixin_39148512/article/details/79234817
  • Serializable接口:序列化。具體參看部落格:https://www.cnblogs.com/huhx/p/serializable.html

ArrayList中的變量,下面構造函數和add()相關方法将會用到以下變量。

ArrayList源碼了解

ArrayList的構造函數:

ArrayList源碼了解

ArrayList API

//**Collection中定義的API**
boolean             add(E object)
boolean             addAll(Collection<? extends E> collection)
void                clear()
boolean             contains(Object object)
boolean             containsAll(Collection<?> collection)
boolean             equals(Object object)
int                 hashCode()
boolean             isEmpty()
Iterator<E>         iterator()
boolean             remove(Object object)
boolean             removeAll(Collection<?> collection)
boolean             retainAll(Collection<?> collection)
int                 size()
<T> T[]             toArray(T[] array)
Object[]            toArray()

//**AbstractionList中定義的API**
void                add(int location, E object)
boolean             addAll(int location, Collection<? extends E> collection)
E                   get(int location)
int                 indexOf(Object object)
int                 lastIndexOf(Object object)
ListIterator<E>     listIterator(int location)
ListIterator<E>     listIterator()
E                   remove(int location)
E                   set(int location, E object)
List<E>             subList(int start, int end)

// ArrayList新增的API
Object               clone()
void                 ensureCapacity(int minimumCapacity)
void                 trimToSize()
void                 removeRange(int fromIndex, int toIndex)