因為小弟某些原因開始研讀集合物件(Collection Framework),首先先介紹一下比較容易了解的ArrayList。
ArrayList 是實作 List 這個介面,也可以在 List 介面中發現許多集合物件有實作此類別 EX: LinkedList Vector ...等等
其中實作List介面的集合物件有幾個特性:
1.存進去的資料可以重複
2.具有順序性
因為這篇針對 ArrayList 做解說, List 就稍微介紹到這,ArrayList 說明白的就是存放資料用,可能這邊會有人說:可以用陣列就好了啊為什麼還要 ArrayList !?
首先這裡帶著大家回憶一下陣列宣告時
陣列宣告的時候:
我們需要給他指定的型態、指定資料或資料大小,如果今天是資料庫的資料,多少筆我根本不可能一個一個數,這時候 ArrayList 可以改善這特性,因為 ArrayList 可以動態配置。
再來,因為陣列宣告比資料多,或是要再重新配置,會導致記憶體與效能的浪費,所以這裡簡單整理ArrayList優於陣列的 幾個要點:
1.可以動態配置空間
2.減少記憶體與效能的浪費
接下來談談ArrayList存入的型態,因為不需要指定資料型態,所以什麼資料都可以存入,所以 ArrayList 裡面的資料型態叫(Object)
當要處理資料時就要進行轉型
接下來就帶著大家實作 ArrayList:
這圖是API中ArrayList的建構子使用方式,整理出一個表格給大家:
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());
}
}
其結果如下:
其型態乍看之下好像是字串對吧!?因為剛剛我們存進去是存字串,可是我們換一種寫法看看:
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!!!
顯示結果如下:
其實是完全一樣的,可是往後存的是一個類別,必須要轉型,其實是非常麻煩的事情,這時候我們可以用"<>"(泛型)來指定存進去的型態是什麼型態,這時候把程式再改一下:
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,其顯示結果如下:
其實因為都是字串所以看起來都一樣!但型態已經改成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"資料,其顯示結果如下:
我們發現size是根據ArrayList的資料多寡來呈現數量,remove("Java")他是移除最先加入的那筆資料,請大家要記一下喔※如果要考OCP的這個很重要!!
以上就是ArrayList簡單的介紹,用一種簡單的例子來解說希望對大家有幫助XD