Recent in Recipes

簡介Java - ArrayList



因為小弟某些原因開始研讀集合物件(Collection Framework),首先先介紹一下比較容易了解的ArrayList

首先根據  API 說明書中 https://docs.oracle.com/javase/7/docs/api/
ArrayList 是實作  List 這個介面,也可以在  List 介面中發現許多集合物件有實作此類別  EX: LinkedList Vector ...等等

其中實作List介面的集合物件有幾個特性:
1.存進去的資料可以重複
2.具有順序性

因為這篇針對  ArrayList 做解說, List 就稍微介紹到這,ArrayList 說明白的就是存放資料用,可能這邊會有人說:可以用陣列就好了啊為什麼還要  ArrayList !?
首先這裡帶著大家回憶一下陣列宣告時
陣列宣告的時候:
1.png
我們需要給他指定的型態、指定資料或資料大小,如果今天是資料庫的資料,多少筆我根本不可能一個一個數,這時候  ArrayList 可以改善這特性,因為  ArrayList 可以動態配置。

再來,因為陣列宣告比資料多,或是要再重新配置,會導致記憶體與效能的浪費,所以這裡簡單整理ArrayList優於陣列的 幾個要點:
1.可以動態配置空間
2.減少記憶體與效能的浪費

接下來談談ArrayList存入的型態,因為不需要指定資料型態,所以什麼資料都可以存入,所以  ArrayList 裡面的資料型態叫(Object)

當要處理資料時就要進行轉型

接下來就帶著大家實作  ArrayList:
1.png



這圖是APIArrayList的建構子使用方式,整理出一個表格給大家:

ArrayList 建構子
說明
ArrayList()
建立一個空的ArrayList
ArrayList(int capacity)
建立一個指定容量的ArrayList
ArrayList(Collection<? extends E> c)
使用實作的interface建立ArrayList

看完建構子我們列幾個常用的方法:
方法
說明
boolean add(E e)
照順序增加元素
boolean add(int index , E element)
指定索引值增加元素
void clear()
清空list所有元素
E get(int index)
取得索引值中的資料
E remove(int index)
移除指定索引值的資料
boolean remove(Object object)
移除相同內容的資料
Int size()
List中資料數量

我們實作一段程式如下:
 
public class Test01 { public static void main(String[] args) { ArrayList test = new ArrayList(); test.add("Hello"); test.add("Java"); test.add("Have"); test.add("Fun"); test.add("Java"); System.out.println(test.get(0)); for (int i = 0; i <test.size(); i++) { System.out.println("data:"+test.get(i)); } System.out.println("data size:"+test.size()); } }

其結果如下:
1.png

其型態乍看之下好像是字串對吧!?因為剛剛我們存進去是存字串,可是我們換一種寫法看看:

 
public class Test01 { public static void main(String[] args) { ArrayList test = new ArrayList(); test.add("Hello"); test.add("Java"); test.add("Have"); test.add("Fun"); test.add("Java"); System.out.println(test.get(0)); for (Object object : test) { System.out.println("data:"+object); } System.out.println("data size:"+test.size()); } }
我們把迴圈改成for-each看到承接的是Object
所以說他的型態是Object!!!
顯示結果如下:
1.png
其實是完全一樣的,可是往後存的是一個類別,必須要轉型,其實是非常麻煩的事情,這時候我們可以用"<>"(泛型)來指定存進去的型態是什麼型態,這時候把程式再改一下:

 
public class Test01 {
    public static void main(String[] args) {
        ArrayList<String> test = new ArrayList();
        
        test.add("Hello");
        test.add("Java");
        test.add("Have");
        test.add("Fun");
        test.add("Java");
        
        System.out.println(test.get(0));
        
        for (String object : test) {
            System.out.println("data:"+object);
        }
        
        System.out.println("data size:"+test.size());
          
    }
    
}

我們在建造物件時指定<String>型態,所以for-each改變承接型態為String,其顯示結果如下:
1.png
其實因為都是字串所以看起來都一樣!但型態已經改成String!!
再來是我們指定好ArrayList大小再搭配remove()做使用看看,其程式如下:

 

public class Test01 {
    public static void main(String[] args) {
        ArrayList<String> test = new ArrayList(10);
        
        test.add("Hello");
        test.add("Java");
        test.add("Have");
        test.add("Fun");
        test.add("Java");
        
        test.remove("Java");
        
        for (String object : test) {
            System.out.println("data:"+object);
        }
        
        System.out.println("data size:"+test.size());
        test.remove("Java");
          
    }
    
}

我們先指定好容量大小以及在增加完資料後移除"Java"資料,其顯示結果如下:
1.png
我們發現size是根據ArrayList的資料多寡來呈現數量,remove("Java")他是移除最先加入的那筆資料,請大家要記一下喔※如果要考OCP的這個很重要!!


以上就是ArrayList簡單的介紹,用一種簡單的例子來解說希望對大家有幫助XD