A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 早知道 中级黑马   /  2013-9-28 07:34  /  1066 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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获得.

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1 赞一个!

查看全部评分

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马