close

動態陣列 ArrayList

ArrayList是一個類似於陣列的集合物件,可以用來存放一至多個元素,有下列幾項重點:

  • ArrayListCollection的子介面List的實作類別
  • Arraylist可以動態增刪陣列內元素資料,而Array的內容大小宣告完後就固定不變,且元素資料型態必須都要一致
  • List是具有順序性,且提供許多操作元素的方法,如下

 

1.建立 ArrayList

List a = new ArrayList(); 
ArrayList b = new ArrayList(); 
List<string> c = new ArrayList();  //指定泛型,限定陣列只能是String物件型態

 

2.加入元素 add(object o)

 要特別注意index是從0開始,且如果有指定泛型的資料型態,放入其他資料型態的資料就會出現compilation error

List<string> a = new ArrayList();
 a.add("A");   //依序在動態陣列存放"A"、"B"、"C"、10
 a.add("B");
 a.add("C");
 a.add(10); //其實動態陣列只能存放物件,但int為基本資料型態,所以標準寫法是a.add(new Integer(10));但是JAVA提供簡化寫法,如a.add(10),JAVA會自動轉換為int物件)

 

3.陣列輸出

可以使用for-each迴圈來一個一個輸出,或是利用Lambda的foreach來輸出

for(String a : list){
     System.out.println(s);
}

list.forEach(a -> System.out.println(a));

//        list.forEach(new Consumer<String>() {
//            @Override
//            public void accept(String s) {
//                System.out.println(s);
//            }
//        });


4.陣列大小 size()

 size() 會回傳目前動態陣列裡面的元素個數總和

System.out.println( "size= "+ a.size() ); //size()輸出是int型態數字,現在內容有4個資料,所以返回是4

 

5.查詢特定元素是否在陣列 contains(object o)

contains("test") 會回傳布林值true/false,只要contains方法參數的元素有存在動態陣列裡面,就會回傳true,反之亦然

System.out.println(a.contains("AB")); // 元素存在於集合內就回傳true,反之則false

 

6.判斷陣列是否為空 isEmpty()     

isEmpty(),會回傳一布林值,如為動態陣列為空即回傳true,反之亦然

System.out.println("是否為空" + a.isEmpty()); // 集合元素為空就回傳true,反之則false

 

7.修改資料 set(int index, object o)

set(0,"kevin"),第一個參數為索引值,索引值是從0開始算,而第二個參數就是要修改的物件

// 假設現在動態陣列a的集合元素是這樣 -> [a,b,c,d,e]
a.set(0, "KEVIN");
System.out.println(a);//陣列現在內容是[KEVIN,b,c,d,e]

 

8.取得資料 get(int index)

get(3),表示取出索引位置為3的物件,如果沒有使用泛型(Generic)指定要存放的資料型態的話,就要盡量使用資料型態為Object的變數來接get()回傳的值

// 假設現在動態陣列a的集合元素是這樣 -> [a,b,c,d,e]
// Object 是萬用型別,而儲存在ArrayList裡的資料也都是Object物件資料
Object obj = a.get(3);//根據索引位置取得資料,要記得陣列起頭是從0開始,所以就會取得所引為3的元素就是'd'
System.out.println("obj=+"obj);//obj = d

 

9.查詢索引位置 indexOf(Object o)   

indexOf("b") ,只有一個參數,這參數是一個物件,如果這一個物件在動態陣列裡面的話,就會回傳一個型態為int的那個物件的索引位置,如果不在裡面的話就會回傳一個-1

// 假設現在動態陣列a的集合元素是這樣 -> [a,b,c,d,e]    
int index = a.indexOf("b"); //只要有在動態陣列裡就傳回索引位置,如果沒有在陣列裡就傳回-1
System.out.println(index);//剛剛找的b在1,所以會印出1

 

10.刪除資料 remove(Object o) or remove(int index)

刪除元素有兩種方式,差別在於回傳值不同,

  • remove("str") 回傳一個布林值,true表示成功刪除,反之亦然
  • remove(0) 回傳索引位置是0的物件

看程式本身需求是什麼,在去判斷要使用哪一個吧~

// 假設現在動態陣列a的集合元素是這樣 -> [a,b,c,d,e]  
obj = a.remove(0); //意思是取出(刪除)第0項物件資料提出來放在obj變數,並把陣列裡的第0項刪除
System.out.println(obj);//可以列出剛提出的object 就是 a
boolean isOk;
isOk = a.remove("b");//換成在參數內換物件資料,意思是從陣列移除"b",並傳回一個布林值
System.out.println("是否成功刪除:"+isOk);//成功刪除顯示true,反之則false
System.out.println(a);//陣列現在變成  [c,d,e]        
arrow
arrow

    KV 發表在 痞客邦 留言(1) 人氣()