如下代碼:
1 package com.company; 2 3 import java.lang.reflect.Array; 4 import java.util.ArrayList; 5 6 public class Array_List { 7 public static void main(String[] args){ 8 ArrayList<String> arr_a=new ArrayList<>(); 9 for(int i=0;i<20;i++){ 10 arr_a.add("ok"); 11 } 12 String[] int_ar=new String[20]; 13 String[] new_ar= arr_a.toArray(int_ar); 14 System.out.println(arr_a.get(1)); 15 for(String i:arr_a){System.out.println(i);} 16 } 17 }
1 package com.company; 2 3 import java.lang.reflect.Array; 4 import java.util.ArrayList; 5 6 public class Array_List { 7 public static void main(String[] args){ 8 ArrayList<Integer> arr_a=new ArrayList<>(); 9 for(int i=0;i<20;i++){ 10 arr_a.add(i); 11 } 12 Integer[] int_ar=new Integer[20]; 13 System.out.println(arr_a.get(1)); 14 for(Integer i:arr_a){System.out.println(i);} 15 } 16 }
泛型數組列表:
之前我們接觸的原始數組,無法確定動態確定數組的大小,在初始化數組的時候定義其大小,之后如果在改變其大小比較麻煩。於是就有ArrayList類實現動態數組大小。
當當前數組列表超過當前長度,會把當前的數組元素拷貝到大的數組內。
1 public class Array_List { 2 public static void main(String[] args){ 3 ArrayList<Integer> arr_a=new ArrayList<>(10); 4 for(int i=0;i<20;i++){ 5 arr_a.add(i); 6 } 7 System.out.println(arr_a.get(1)); 8 for(Integer i:arr_a){System.out.println(i);} 9 } 10 }
語法:
ArrayList<參數類型> 變量名字= new ArrayList<參數類型可以沒有>(容量大小也可以不寫)
注意:只能是引用對象才可以使用ArrayList 如果基本數據類型想使用的話需要使用裝箱器才可以使用!!!
方法:
添加、刪除、獲取等方法。
其中獲取和設置(get、set方法):如果數據列表中為空或者超出索引set會報錯。我們可以用先在插入對象的時候,可以使用ArrayList,獲取的時候 我們進行轉換到普通數組使用[數字]風格來獲取數組的元素。如下:
1 package com.company; 2 3 import java.lang.reflect.Array; 4 import java.util.ArrayList; 5 6 public class Array_List { 7 public static void main(String[] args){ 8 ArrayList<Integer> arr_a=new ArrayList<>(10); 9 for(int i=0;i<20;i++){ 10 arr_a.add(i); 11 } 12 Integer[] ar2= new Integer[arr_a.size()]; 13 Integer[] new_ar=(Integer[]) arr_a.toArray(ar2); 14 System.out.println(new_ar[0]); 15 } 16 }
在ArrayList<>中參數類型不允許基本數據類型比如:int 、float、double等,但是基本數據類型也對應的對象,比如:int=>Integer float=>Float double->Double short=>Short bytes=>Bytes boolean=>Boolean 我將對應的類叫做包裝器。
對象包裝器類是不可變的,一般構造器生成,就不允許改變其中的值,同時包裝的類還是final,因此不能定義子類。
自動裝箱:
在如上基本類型的包裝器中,在調用ArrayList的時候,我們可以直接使用:arr_a.add(3);但是實際編譯器幫我們實現這個過程:arr_a.add(Integer.valueOf(4));這個過程叫做自動裝箱autoboxing
1 package com.company; 2 3 import java.lang.reflect.Array; 4 import java.util.ArrayList; 5 6 public class Array_List { 7 public static void main(String[] args){ 8 ArrayList<Integer> arr_a=new ArrayList<>(10); 9 for(int i=0;i<20;i++){ 10 arr_a.add(i); 11 } 12 arr_a.add(3); 13 arr_a.add(Integer.valueOf(4)); 14 Integer[] ar2= new Integer[arr_a.size()]; 15 Integer[] new_ar=(Integer[]) arr_a.toArray(ar2); 16 System.out.println(new_ar[arr_a.size()-1]); 17 System.out.println(new_ar[arr_a.size()-2]); 18 } 19 }
自動拆箱:
比如我們獲取上面的數組的元素值。System.out.println(arr_a.get(3)); 相當於System.out.println(arr_a.get(3).intValue()); 我們叫做自動拆箱。包括變量的自增都屬於自動拆箱在自動裝箱!
1 import java.util.ArrayList; 2 3 public class Array_List { 4 public static void main(String[] args){ 5 ArrayList<Integer> arr_a=new ArrayList<>(10); 6 for(int i=0;i<20;i++){ 7 arr_a.add(i); 8 } 9 arr_a.add(3); 10 arr_a.add(Integer.valueOf(4)); 11 System.out.println(arr_a.get(3)); 12 System.out.println(arr_a.get(3).intValue()); 13 Integer[] ar2= new Integer[arr_a.size()]; 14 Integer[] new_ar=(Integer[]) arr_a.toArray(ar2); 15 System.out.println(new_ar[arr_a.size()-1]); 16 System.out.println(new_ar[arr_a.size()-2]); 17 } 18 }