使用Arrays工具类将array数组转成List集合:
Set<List<Integer>> set=new HashSet<>();
List<Integer> array=Arrays.asList(1,3,2);
首先,先看Arrays.asList方法:
/* @param the class of the objects in the array
* @param a the array by which the list will be backed
* @return a list view of the specified array
*/
@SafeVarargs
@SuppressWarnings("varargs")
public static <T> List<T> asList(T... a) {
return new ArrayList<>(a);
}
Arrays工具类几乎都是静态方法,参数a为数组,返回值为List集合,默认走的ArrayList集合。
其次,看看new ArrayList<>(a);走的哪个类
private static class ArrayList<E> extends AbstractList<E>
implements RandomAccess, java.io.Serializable
{
private static final long serialVersionUID = -2764017481108945198L;
private final E[] a;
ArrayList(E[] array) {
a = Objects.requireNonNull(array);
}
@Override
public int size() {
return a.length;
}
这是在Arrays工具类内部的一个静态内部类,本质上走的这个内部类的构造器,也就是下面的代码:
private final E[] a;
ArrayList(E[] array) {
a = Objects.requireNonNull(array);
}
requireNonNull(array),只是为了判断array是不空的,如果是空的则catch异常,不为空则正常返回。
a是一个数组,其实就是ArrayList底层维护的存放数据的数组。可见就是通过更新arrayList底层的数组来实现转成集合的操作。
但是需要注意的是:通过Arrays.list生成的集合不能使用add操作,原因就是Arrays工具类中的ArrayList内部类没重写其父类AbstractList的add方法,所以调用的是其父类的AbstractList的add方法导致异常:
java.lang.UnsupportedOperationException
ArrayList类继承AbstractList并重写add方法才可以添加,add方法比较重要,其中涉及到扩容机制。
Arrays常用工具类
Arrays.sort()
复杂度:O(NlogN) 本质上是快排,或者使用比较器定义比较的方法再用快排,准确来说是优化基准的快排。
集合之间的互转