java 泛型数组列表

如下代码:

 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 }

 

posted @ 2017-10-16 17:21  evil_liu  阅读(3289)  评论(0编辑  收藏  举报