目錄
1.ArrayList簡介
2.ArrayList的構造?
2.1ArrayList()
?2.2ArrayList(Collection c)
?2.3ArrayList(int initialCapacity)
3.ArrayList常見操作 ?
4.ArrayList的遍歷的遍歷
1.ArrayList簡介
在集合框架中, ArrayList 是一個普通的類,實現了 List 接口,具體框架圖如下:

?說明:
1. ArrayList 是以泛型方式實現的,使用時必須要先實例化2. ArrayList 實現了 RandomAccess 接口,表明 ArrayList 支持隨機訪問3. ArrayList 實現了 Cloneable 接口,表明 ArrayList 是可以 clone 的4. ArrayList 實現了 Serializable 接口,表明 ArrayList 是支持序列化的5. 和 Vector 不同, ArrayList 不是線程安全的,在單線程下可以使用,在多線程中可以選擇 Vector 或者 CopyOnWriteArrayList6. ArrayList 底層是一段連續的空間,并且可以動態擴容,是一個動態類型的順序表
2.ArrayList的構造?
2.1ArrayList()
public static void main(String[] args) {ArrayList<Integer> arrayList = new ArrayList<>();arrayList.add(1);arrayList.add(2);}
源代碼:
?2.2ArrayList(Collection<? extends E> c)
<? extends E>這是什么?
規定了類型上界,即該數組元素的類型上限是E,后面定義裝載的元素類型必須是E本身或者E的子類。
public static void main(String[] args) {ArrayList<Integer> arraylist = new ArrayList<>();arraylist.add(-1);arraylist.add(100);arraylist.add(200);ArrayList<Number> arrayList2 = new ArrayList<>(arraylist);arrayList2.add(-100);System.out.println(arrayList2);}
源代碼:
?2.3ArrayList(int initialCapacity)
public static void main(String[] args) {ArrayList<Integer> arrayList = new ArrayList<>(2);arrayList.add(100);arrayList.add(200);}
?
匯總:
3.ArrayList常見操作 ?
常用方法匯總:
方法 | 解釋 |
boolean add (E e) | 尾插 e |
void add (int index, E element) | 將 e 插入到 index 位置 |
boolean addAll (Collection<? extends E> c) | 尾插 c 中的元素 |
E remove (int index) | 刪除 index 位置元素 |
boolean remove (Object o) | 刪除遇到的第一個 o |
E get (int index) | 獲取下標 index 位置元素 |
E set (int index, E element) | 將下標 index 位置元素設置為 element |
void clear () | 清空 |
boolean contains (Object o) | 判斷 o 是否在線性表中 |
int indexOf (Object o) | 返回第一個 o 所在下標 |
int lastIndexOf (Object o) | 返回最后一個 o 的下標 |
List<E> subList (int fromIndex, int toIndex) | 截取部分 list |
抓重點解析:
1.boolean add(E e)
源代碼:
?
【 總結 】
1. 檢測是否真正需要擴容,如果是調用 grow 準備擴容2. 預估需要庫容的大小 初步預估按照1.5 倍大小擴容 如果用戶所需大小超過預估1.5 倍大小,則按照用戶所需大小擴容 ,真正擴容之前檢測是否能擴容成功,防止太大導致擴容失敗3. 使用 copyOf 進行擴容
2.?void add(int index, E element)
在 list 的 index 位置插入指定元素, index 及后續的元素統一往后搬移一個位置
3.? E remove (int index)與boolean remove (Object o)
ArrayList<Integer> arraylist = new ArrayList<>(); arraylist.add(1); arraylist.add(100); arraylist.add(0); arraylist.remove(0); System.out.println(arraylist);//刪除的是下標為0的元素 arraylist.remove(new Integer(0)); System.out.println(arraylist);//刪除的是元素0
刪除指定元素,找到了就刪除,該元素之后的元素統一往前搬移一個位置
?4.List<E> subList(int fromIndex, int toIndex)
構成一個新的 SubList 返回 , 但是和 ArrayList 共用一個 elementData 數組
public static void main(String[] args) {ArrayList<Integer> arraylist = new ArrayList<>();arraylist.add(1);arraylist.add(100);arraylist.add(0);List<Integer> sub = arraylist.subList(1, 3);System.out.println(sub);sub.set(0,100000);System.out.println(sub);System.out.println(arraylist);}
4.ArrayList的遍歷的遍歷
ArrayList 可以使用三方方式遍歷: for 循環 + 下標、 foreach 、使用迭代器
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
// 使用下標+for遍歷
for (int i = 0; i < list.size(); i++) {
System.out.print(list.get(i) + " ");
}
System.out.println();
// 借助foreach遍歷
for (Integer integer : list) {
System.out.print(integer + " ");
}
System.out.println();
Iterator<Integer> it = list.listIterator();
while(it.hasNext()){
System.out.print(it.next() + " ");
}
System.out.println();
}
迭代器:?
?
以上為我個人的小分享,如有問題,歡迎討論!!!?
都看到這了,不如關注一下,給個免費的贊?
?