JAVA泛型数组ArrayList详解

泛型程序设计意味着编写的代码可以被很多不同类型的对象所重用。例如,我们并不希望为聚集String和File对象分别设计不同的类。下面来解释一下泛型数组ArrayList(泛型数组来解释一下这个原理):

java没有增加泛型类之前:

在java增加泛型类之前,泛型设计是通过继承实现的。ArrayList类只维护一个Object引用的数组:

public class ArrayList{
    private Object[] elementData;
    ...
    public Object get(int i ){...}
    public void add(Object o){...}
}

那么问题来了,ArrayList的get和set方法必须进行类型转换,例如:

ArrayList arr = new ArrayList();
String name = (String)arr.get(0);

而且可能出现错误:

arr.add(new File("..."))

上述代码编译和运行都不会报错,然而如果我们把它get取出来之后强制转化为String类型,就会产生一个运行时出错误。

增加泛型类之后: 

声明数组:

ArrayList<Integer> arr = new ArrayList<>();

这样他维护的实力类型就确定了,都是Integer类型。

ArrayList的一大优点是,他的大小可变,当他的存储空间不能在存储新的数据时,他会自动创建一个新的更大的数组,把当前数组的值拷贝过去,原来的比较小的空间就等待GC回收空间了。 

ArrayList的一些方法:

ArrayList<E>()  //都遭一个空数组列表
ArrayList<E>(int initialCapacity)    //指定数组长度
void ensureCapacity(int capacity)    //查看是够有足够的空间
void trimToSize()     //将数组列表的存储容量消减到当前尺寸

 

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页