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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

creatArrayList2方法,只用了一行代码。。
如果你反射牛逼,可以参考creatArrayList方法


  1. package test;

  2. import java.lang.reflect.Field;
  3. import java.util.ArrayList;
  4. import java.util.Arrays;
  5. import java.util.LinkedList;
  6. import java.util.List;

  7. import org.junit.runners.model.InitializationError;


  8. public class ArrayToListFactory {
  9.         public static String className;
  10.         public static Class clazz;
  11.         static{
  12.                 try {
  13.                         className="java.util.ArrayList";
  14.                         clazz=Class.forName(className);
  15.                 } catch (ClassNotFoundException e) {
  16.                         throw new RuntimeException(e);
  17.                 }
  18.         }
  19.         public static void main(String[] args) {
  20.                 Integer[] arr=new Integer[]{1,2,3};
  21.                 List<Integer> list=creatArrayList(arr);
  22.                 for(int i=5;i<50;i++)
  23.                         list.add(i);
  24.                 System.out.println(list);
  25.         }

  26.         public static <T> List<T> creatArrayList(T[] arr) {
  27.                 final Object[] EMPTY_ELEMENTDATA = {};
  28.                 List<T> list=null;
  29.                         try {
  30.                                 list=(List<T>) clazz.newInstance();
  31.                                 Field sizeField= clazz.getDeclaredField("size");
  32.                                 Field elementDataField= clazz.getDeclaredField("elementData");
  33.                                 sizeField.setAccessible(true);
  34.                                 elementDataField.setAccessible(true);
  35.                                
  36.                                 Object[] arr2=null;
  37.                                 int len=0;
  38.                                 if ((len = arr.length) != 0) {
  39.                             if (arr.getClass() != Object[].class)
  40.                                     arr2 = Arrays.copyOf(arr, len, Object[].class);
  41.                         } else {
  42.                             arr2 = EMPTY_ELEMENTDATA;
  43.                         }
  44.                                 elementDataField.set(list, arr2);
  45.                                 sizeField.set(list, len);
  46.                         } catch (Exception e) {
  47.                                 throw new RuntimeException(e);
  48.                         }
  49.                 return list;
  50.         }
  51.         public static <T> List<T> creatArrayList2(T[] arr) {
  52.                 return new ArrayList<T>(Arrays.asList(arr));
  53.         }
  54. }


复制代码

评分

参与人数 1技术分 +1 收起 理由
lwj123 + 1

查看全部评分

4 个回复

倒序浏览
赞一个     
回复 使用道具 举报
厉害,赞一个
回复 使用道具 举报
赞一个,学习了
回复 使用道具 举报
赞一个,学习了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马