1. 程式人生 > >【java】ArrayList詳解

【java】ArrayList詳解

事實證明,你看完語法書之後,也不一定能寫出來程式碼,還需要不斷的來練習~ —— 小明醬lmx?

ArrayList簡介

ArrayList是一個其容量能夠動態增長的動態陣列。它繼承了AbstractList,實現了ListRandomAccess, 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、在刪除元素時候可以倒著刪除。