集合框架
接下來將要學習的內容為:
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
閱讀更多 JAVA互聯搬磚工人 的文章