【java】ArrayList詳解
事實證明,你看完語法書之後,也不一定能寫出來程式碼,還需要不斷的來練習~ —— 小明醬lmx?
ArrayList簡介
ArrayList
是一個其容量能夠動態增長的動態陣列。它繼承了AbstractList
,實現了List
、RandomAccess
, Cloneable
, java.io.Serializable
。
基本的ArrayList
,長於隨機訪問元素,但是在List
中間插入和移除元素時較慢。同時,ArrayList
的操作不是執行緒安全的!一般在單執行緒中才使用ArrayList
,而在多執行緒中一般使用Vector
或者CopyOnWriteArrayList
。
ArrayList遍歷方式
ArrayList
有三種遍歷方式
迭代器遍歷
Iterator<Integer> it = arrayList.iterator();
while(it.hasNext()){
System.out.print(it.next() + " ");
}
索引值遍歷
for(int i = 0; i < arrayList.size(); i++){
System.out.print(arrayList.get(i) + " ");
}
for迴圈遍歷
for(Integer number : arrayList){
System.out.print(number + " ");
}
需要說明的是,遍歷ArrayList
時,通過索引值遍歷效率最高,for迴圈遍歷次之,迭代器遍歷最低。
toArray()的使用
有時候,當我們呼叫ArrayList
中的 toArray()
,可能遇到過丟擲java.lang.ClassCastException
異常的情況,這是由於toArray()
返回的是 Object[]
陣列,將 Object[]
轉換為其它型別(如,將Object[]
轉換為的Integer[]
)則會丟擲java.lang.ClassCastException
異常,因為Java
不支援向下轉型。
所以一般更常用的是使用另外一種方法進行使用:
<T> T[] toArray(T[] a)
呼叫toArray(T[] a)
返回T[]
可通以下方式進行實現:
// toArray用法
// 第一種方式(最常用)
Integer[] integer = arrayList.toArray(new Integer[0]);
// 第二種方式(容易理解)
Integer[] integer1 = new Integer[arrayList.size()];
arrayList.toArray(integer1);
// 丟擲異常,java不支援向下轉型
//Integer[] integer2 = new Integer[arrayList.size()];
//integer2 = arrayList.toArray();
ArrayList用法示例
import java.util.ArrayList;
import java.util.Iterator;
public class ArrayListDemo {
public static void main(String[] srgs){
ArrayList<Integer> arrayList = new ArrayList<Integer>();
System.out.printf("Before add:arrayList.size() = %d\n",arrayList.size());
arrayList.add(1);
arrayList.add(3);
arrayList.add(5);
arrayList.add(7);
arrayList.add(9);
System.out.printf("After add:arrayList.size() = %d\n",arrayList.size());
System.out.println("Printing elements of arrayList");
// 三種遍歷方式列印元素
// 第一種:通過迭代器遍歷
System.out.print("通過迭代器遍歷:");
Iterator<Integer> it = arrayList.iterator();
while(it.hasNext()){
System.out.print(it.next() + " ");
}
System.out.println();
// 第二種:通過索引值遍歷
System.out.print("通過索引值遍歷:");
for(int i = 0; i < arrayList.size(); i++){
System.out.print(arrayList.get(i) + " ");
}
System.out.println();
// 第三種:for迴圈遍歷
System.out.print("for迴圈遍歷:");
for(Integer number : arrayList){
System.out.print(number + " ");
}
// toArray用法
// 第一種方式(最常用)
Integer[] integer = arrayList.toArray(new Integer[0]);
// 第二種方式(容易理解)
Integer[] integer1 = new Integer[arrayList.size()];
arrayList.toArray(integer1);
// 丟擲異常,java不支援向下轉型
//Integer[] integer2 = new Integer[arrayList.size()];
//integer2 = arrayList.toArray();
System.out.println();
// 在指定位置新增元素
arrayList.add(2,2);
// 刪除指定位置上的元素
arrayList.remove(2);
// 刪除指定元素
arrayList.remove((Object)3);
// 判斷arrayList是否包含5
System.out.println("ArrayList contains 5 is: " + arrayList.contains(5));
// 清空ArrayList
arrayList.clear();
// 判斷ArrayList是否為空
System.out.println("ArrayList is empty: " + arrayList.isEmpty());
}
}
/**
Before add:arrayList.size() = 0
After add:arrayList.size() = 5
Printing elements of arrayList
通過迭代器遍歷:1 3 5 7 9
通過索引值遍歷:1 3 5 7 9
for迴圈遍歷:1 3 5 7 9
ArrayList contains 5 is: true
ArrayList is empty: true
*/
ArrayList 中常用的方法
add(E e)
在陣列末尾新增元素
size()
陣列中實際元素個數,並不是陣列容量
add(int index, E e)
在陣列指定位置新增元素
clear()
將陣列中元素清空
contains(E e)
判斷陣列中是否含有某個元素
get(int index)
返回陣列指定位置的元素
indexOf(E e)
返回陣列指定元素第一次出現的位置
set(int index, E e)
替換陣列指定位置的值
remove(int index)
移除陣列指定位置的元素
remove(E e)
移除陣列中第一次出現的指定元素
addAll(Collection<? extends E> c)
在陣列末尾新增另一個數組
addAll(int index, collection<? extends E> c)
在陣列指定位置新增另一個數組
removeAll(Collection<?>c)
將陣列中屬於陣列 c 中的元素全部刪除
注意
1、操作ArrayList時要注意下標會改變。 2、下標和疊加器方式最好不能混著用。 3、在刪除元素時候可以倒著刪除。