黑马程序员技术交流社区
标题:
可变数组的实现
[打印本页]
作者:
早知道
时间:
2013-9-28 07:34
标题:
可变数组的实现
ArrayList底层数据结构是数组,但数组长度是不可变的,那ArrayList是如何实现长度可变呢?通过反射就可以实现保留当前数组数据的同时动态地扩展数组。可以通过以下代码实现
public static Object goodArrayGrow(Object a){
Class cl = a.getClass();
if(!cl.isArray()) return null;
Class componentType = cl.getComponentType();//获得数组中对象的类型
int length = Array.getLength(a);//取得原有数组的长度
int newLength = length*11/10+10;
Object newArray = Array.newInstance(componentType, newLength);
System.arraycopy(a, 0, newArray, 0, length);
return newArray;
}
复制代码
上面主要通过Array类的静态方法newInstance来获取新数组。对其必须提供两个参数,一个是数组的类型,一个是数组的长度。其中类型是通过Class类的getComponentType方法获得,长度要通过Array类的静态方法getLength获得.
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2