如下代码:
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 }