ArrayList簡介
ArrayList類是一個可以動態修改的數組,與普通數組的區別是隻需要聲明數組名,不需要在開始的時候初始化數組大小,可以動態的添加和刪除元素
ArrayList使用方法
ArrayList類位於java.util包中,使用前要導入包,格式爲
import java.util.ArrayList;//導入包
使用時需要對類進行初始化,初始化格式爲
ArrayList<E> objectName = new ArrayList<>();
其中 objectName爲類名
E爲泛型數據類型,只能爲引用數據類型
基本數據類型和引用數據類型的對應表格爲
基本數據類型 | 引用數據類型 |
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
bool | Boolean |
當數據類型爲Integer,名字爲IntDemo時,對該類初始化
ArrayList<Integer> IntDeom = new ArrayList<>();//生成一個名爲IntDemo的表,存儲int型數據
ArrayLIst類的add方法
該方法根據參數的不同有兩種形式
add(E element)
對於初始化的IntDemo表,爲 add(Integer element)
調用該方法添加前十一個自然數的代碼如下
for(int i = 0; i <= 10; i ++){//將十一個自然數添加到表中
IntDemo.add(i);
}
將26個小寫英文字母添加到char類型的代碼如下
ArrayList<Character> CharDemo = new ArrayList<>();//初始化定義一個char類型的表
for(char element = 'a'; element <= 'z'; a ++){//遍歷26個英文字母並添加到表中
CharDemo.add(element);
}
當參數有兩個時,方法原型爲
add(int index, E element)
index表示數組下標,element表示要添加進去的元素
該添加元素會佔用原來元素的位置,後面的元素依次後移一位
如在第一個數組中在0 位置添加數據11時
11,0,1,2........
IntDemo.add(0, 11)
只能在該數組原有下標範圍內添加,超過則報錯
如IntDemo.add(13,11)則報錯越界
ArrayList addAll方法
addAll(Collection<? extends E> c)//將一個集合完整的添加到另一個集合中
如
ArrayList<Integer> IntDemoCopy = new ArrayLIst<>();//創建一個新集合
IntDemoCopy.addAll(IntDemo);//使用addAll方法將IntDemo中的所有元素添加到IntDemoCopy中
addAll(int index, Collection<? extends E> c)//從該集合的某個下標開始添加,一定要判斷是否擴展到該下標,如
IntDemoCopy.addAll(5, IntDemo);//從下標開始插入新的一個元素集
在中間插入會動態重組鏈表,如在1,2,3,4,5的二號下標開始插入7,8的結果爲
1,2,7,8,3,4,5
獲取其中的元素
get(int index)
根據下標獲取元素
ArrayList數據的遍歷
1、採用for循環,根據表的長度迭代輸出
for(int i = 0; i < IntDemo.size(); i ++){//size是該動態數組容量的大小
System.out.println(IntDemo.get(i));
}
2、採用for each語句,對錶進行遍歷輸出
for(Integer element:IntDemo){
System.out.println(element);
}
3、採用迭代器
迭代器是一個提供了迭代基本規則的接口
public interface Iterator<E>{
boolean hasNext();//判斷是否存在下一個元素
E next();//獲取下一個元素
void remove();//移除元素
}
對該集合中所有的數據進行迭代,刪除其中大於五的數據,進行迭代輸出的結果爲
Iterator<Integer> it = IntDemo.iterator();//迭代器初始化
//遍歷所有數據並輸出結果
while(it.hasNext()){//當下一個節點不爲空的時候,進行遍歷
System.out.println(it.next());//next存儲了當前節點的數據值,進行輸出
}
//刪除該集合中所有大於5的節點的數據值
it = IntDemo.iterator();//由於在上面的遍歷中已經到最後一個節點,所以要進行初始化
while(it.hasNext()){//對所有節點進行遍歷
if(it.next() >= 5){//當值大於等於5的時候
it.remove();//刪除當前節點
}
}
it = IntDemo.iterator();//初始化
while(it.hasNext()){
System.out.println(it.next());
}
修改元素
set(int index, Integer element)//分別對應下標和元素
將該集合中所有大於等於5的數據賦值爲0的寫法如下
for(int i = 0; i < IntDemo.size(); i ++){
if(IntDemo.get(i) >= 5){
IntDemo.set(i, 0);
}
}
不能用迭代器,因爲迭代器中只有刪除的方法,沒有改變值的方法
刪除元素
remove(int index)根據下標進行元素的刪除
將該集合中前五個元素刪除,由於該集合是動態數組結構,每次刪除一個元素集合的結構都會改變,所以只需刪除第一個元素五次就能達到刪除前五個元素的目的,實現如下
for(int i = 0; i < 5; i ++){
IntDemo.remove(0);
}
remove(object o)//刪除出現的第一個元素o
比如刪除第一個出現的1
IntDemo.remove(new Integer(1));//刪除出現的第一個元素爲1的元素
//由於默認情況下,1是int型,而對象的參數是object,要轉化爲Integer型,int轉化爲Integer的方法
Integer a = new Integer(1);
刪除滿足給定集合條件的元素
removeIf(Predicate<? super E> filter)
如刪除大於等於5的元素可以寫爲
IntDemo.removeIf(id -> id >= 5);//刪除該集合中所有大於等於五的元素
//lambda寫法 參數 -> 條件
//刪除所有等於2的寫法爲
IntDemo.removeIf(id -> id == 2);
//刪除所有在區間[2,5]中的元素寫法爲
IntDemo.removeIf(id -> id >= 2 && id <= 5);
查找元素
contains(Object o);如果包含返回true
如判斷是否包含元素1的寫法爲
if(IntDemo.contains(new Integer(1)){
System.out.println("包含元素1");
}
indexOf(Object o);返回該元素第一次出現的下標,不包含,則返回-
查找元素1第一次出現的下標的寫法爲
int FirstIndex = IntDemo.indexOf(new Integer(1));
元素排序
Collections類中有sort方法可以對ArrayLIst集合進行排序
import java.util.Collections;
Collections.sort(IntDemo);