黑马程序员技术交流社区
标题:
教你如何一句代码将数组转为可变长度的集合
[打印本页]
作者:
as604049322
时间:
2015-5-21 16:43
标题:
教你如何一句代码将数组转为可变长度的集合
creatArrayList2方法,只用了一行代码。。
如果你反射牛逼,可以参考creatArrayList方法
package test;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import org.junit.runners.model.InitializationError;
public class ArrayToListFactory {
public static String className;
public static Class clazz;
static{
try {
className="java.util.ArrayList";
clazz=Class.forName(className);
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
}
public static void main(String[] args) {
Integer[] arr=new Integer[]{1,2,3};
List<Integer> list=creatArrayList(arr);
for(int i=5;i<50;i++)
list.add(i);
System.out.println(list);
}
public static <T> List<T> creatArrayList(T[] arr) {
final Object[] EMPTY_ELEMENTDATA = {};
List<T> list=null;
try {
list=(List<T>) clazz.newInstance();
Field sizeField= clazz.getDeclaredField("size");
Field elementDataField= clazz.getDeclaredField("elementData");
sizeField.setAccessible(true);
elementDataField.setAccessible(true);
Object[] arr2=null;
int len=0;
if ((len = arr.length) != 0) {
if (arr.getClass() != Object[].class)
arr2 = Arrays.copyOf(arr, len, Object[].class);
} else {
arr2 = EMPTY_ELEMENTDATA;
}
elementDataField.set(list, arr2);
sizeField.set(list, len);
} catch (Exception e) {
throw new RuntimeException(e);
}
return list;
}
public static <T> List<T> creatArrayList2(T[] arr) {
return new ArrayList<T>(Arrays.asList(arr));
}
}
复制代码
作者:
董小姐
时间:
2015-5-21 19:53
赞一个
作者:
lanbo
时间:
2015-5-21 20:39
厉害,赞一个
作者:
守株人
时间:
2015-5-21 20:46
赞一个,学习了
作者:
星辉祝愿
时间:
2015-5-21 23:41
赞一个,学习了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2