package com.mayi1203.myproject.util;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
/**
* 数组集合工具类
* @author 码蚁1203
* @date 2020年3月20日
*/
public final class ArrayCollectionUtils {
/**
* 方法一:数组转集合,返回结果可增删数据
* @param <T>
* @param array
* @return
*/
public static final <T> List<T> toList(T[] array) {
List<T> list = new ArrayList<>(Arrays.asList(array));
return list;
}
/**
* 方法二:数组转集合,返回结果不可增删数据
* @param <T>
* @param array
* @return
*/
public static final <T> List<T> asList(T[] array) {
return Arrays.asList(array);
}
/**
* 方法三:集合转数组
* @param <T>
* @param list
* @param clazz
* @return
*/
@SuppressWarnings("unchecked")
public static final <T> T[] toArray(List<T> list, Class<T> clazz) {
if(Objects.isNull(list)) {
list = Collections.emptyList();
}
T[] array = (T[])Array.newInstance(clazz, list.size());
array = list.toArray(array);
return array;
}
}
- 对方法一进行测试:
public static void main(String[] args) {
String[] array = new String[] {"a", "b", "c"};
List<String> list = toList(array);
System.out.println(list);
}
打印结果:
[a, b, c]
- 对方法一返回结果进行增删数据测试:
public static void main(String[] args) {
String[] array = new String[] {"a", "b", "c"};
List<String> list = toList(array);
list.add("d");
list.remove(0);
System.out.println(list);
}
打印结果:
[b, c, d]
- 对方法二进行测试:
public static void main(String[] args) {
String[] array = new String[] {"a", "b", "c"};
List<String> list = asList(array);
System.out.println(list);
}
- 对方法三返回结果进行增删数据测试:
public static void main(String[] args) {
String[] array = new String[] {"a", "b", "c"};
List<String> list = asList(array);
list.add("d");
list.remove(0);
System.out.println(list);
}
打印结果:
Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.AbstractList.add(AbstractList.java:148)
at java.util.AbstractList.add(AbstractList.java:108)
at com.wuyuan.myproject.util.ArrayCollectionUtil.main(ArrayCollectionUtil.java:58)
报错的原因是Arrays.asList(T… a)这个方法返回的结果本质是个数组,所以不能增删数据。
- 对方法三进行测试:
public static void main(String[] args) {
List<String> list = new ArrayList<>(10);
for(int i = 0; i < 10; i++) {
list.add(String.format("%d", i));
}
String[] array = toArray(list, String.class);
System.out.println(Arrays.toString(array));
}
打印结果:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]