小白學JAVA之——List接口的實現類——ArrayList


小白學JAVA之——List接口的實現類——ArrayList
<section>
<section>
<section>

集合框架

接下來將要學習的內容為:

1.Collection接口(線性存儲)(容器的最高父接口);

​ (1)List接口(有序(指有下標/索引)、數據可重複);

(2)Set接口(無序,數據不可重複);

(3)queue隊列;

2.Map接口(鍵(key)-值(value)對存儲)(映射關係)

首先了解一個設計模式:適配者模式(通俗的理解是功能基本不變,只是改了方法名)(最主要的功能就是將一個接口轉換為另一個接口)

List接口的實現類:

1.ArrayList(底層為數組結構)在數組中賦值方式為a[0] = 1; ArrayList底層還是數組,數組賦值是通過腳標賦值的,我現在還要用他賦值的功能,但是對外提供接口變了,賦值變為了add();​ 優點:查、改效率高

​ 2.LinkedList(底層為雙向鏈表)

​ 優點:增、刪效率高

​ 3.Vector(和ArraysList基本上一樣(數組結構),只不過他是線程安全的,訪問效率低)

ArrayList

ArrayList 無參的構造方法,創建了一個長度為0的數組

ArrayList list = new ArrayList();//默認容量為0也有有參的構造方法,指定了初始大小

本質上就是創建了一個參數大小的數組

ArraysList list = new ArrayList(10);//容量設置為10

//還可以傳一個集合,將傳進的集合中的元素copy給新集合來看看源碼:

public ArrayList(int initialCapacity) { //創建時可傳參

if (initialCapacity > 0) { //如果傳的參數容量大於0

this.elementData = new Object[initialCapacity]; //創建一個大小為initialCapacity的數組

} else if (initialCapacity == 0) {

this.elementData = EMPTY_ELEMENTDATA; //如果傳入的參數為0,那就是默認的那個空數組

} else {

throw new IllegalArgumentException("Illegal Capacity: "+ //如果參數小於0則拋出一個異常

initialCapacity);

}

}1.添加元素(add())

添加過程:

先將底層數組擴容

將元素賦值到數組對應位置

返回true

list.add(10);//這裡的這個10是基礎數據類型的對象類型:Integer類型

list.add("abc")//添加元素的位置跟add的次序有關,第一個add在數組的第一個位置源碼

public boolean add(E e) {

ensureCapacityInternal(size + 1); // Increments modCount!!

elementData[size++] = e; //核心代碼:把這個元素賦給了數組相應位置。

return true; //添加成功,返回一個true。如果添加不成功在上一行代碼中就會報錯,不會執行到這一行

}add還可以給指定位置添加元素

//為指定位置添加元素 第一個參數:指定位置,第二個參數:元素值

add(index,data);//給index位置添加data數據,其他數據會往後擠注意:

只能向前面有數據的位置插入,不能中間空了好多位置向後插入,比如容量大小為10,目前只有兩個元素,則只能往0,1,2的位置插入,不能向3,4,5…等位置隔著插入

ArrayList對象不能存儲基本類型,只能存儲引用類型的數據。類似 不能寫,但是存儲基本數據類型對應的包裝類型是可以的。所以,想要存儲基本類型數據, <> 中的數據類型,必須轉換後才能編寫。

2.獲取元素(get())

list.get(0);源碼

//get

public E get(int index) {

rangeCheck(index);

return elementData(index);//如果上句不拋異常,則執行到這句,返回相應的元素

}

//rangeCheck()

private void rangeCheck(int index) {

if (inde


分享到:


相關文章: