黑马程序员技术交流社区

标题: 可变数组的实现 [打印本页]

作者: 早知道    时间: 2013-9-28 07:34
标题: 可变数组的实现
ArrayList底层数据结构是数组,但数组长度是不可变的,那ArrayList是如何实现长度可变呢?通过反射就可以实现保留当前数组数据的同时动态地扩展数组。可以通过以下代码实现
  1. public static Object goodArrayGrow(Object a){
  2. Class cl = a.getClass();
  3. if(!cl.isArray()) return null;
  4. Class componentType = cl.getComponentType();//获得数组中对象的类型
  5. int length = Array.getLength(a);//取得原有数组的长度
  6. int newLength = length*11/10+10;
  7. Object newArray = Array.newInstance(componentType, newLength);
  8. System.arraycopy(a, 0, newArray, 0, length);
  9. return newArray;
  10. }
复制代码
上面主要通过Array类的静态方法newInstance来获取新数组。对其必须提供两个参数,一个是数组的类型,一个是数组的长度。其中类型是通过Class类的getComponentType方法获得,长度要通过Array类的静态方法getLength获得.






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2