Arrays.asList使用的jar包是import java.util.Arrays; Arrays.asList是使用该jar中的ArrayList方法
1、 基本类型数组
Int [] intArr={1,2,3};
List listArr=Arrays.asList(intArr);
System.out.println(listArr.size()); ///长度为1
总结:Arrays.ArrayList的参数为可变长泛型,而基本类型(int、boolean、char等)时无法泛型化得,所以把int[] arry数组当成一个泛型对象,故集合中最终只有一个元素arr,长度便为1
而,String不是基本类型,如果上边代码是String类型:stringArr={“1”,”2”,”3”};
List listArr=Arrays.asList(stringArr);
System.out.println(listArr.size()); ///长度为3
2、 长度固定
长度固定原因是因为它没有重写add、remove方法,所以一旦初始化元素后,集合size是不可变的
String [] arr={“今天”,”是一个”,”晴朗的日子”};
List list=Arrays.asList(arr);
List.add(“新增”);
List.remove(“关注”);
抛出异常信息:java.lang.UnsupportedOperationException(不支持的操作指令)
3、 Arrays.ArrayList探秘
public class Arrays { @SafeVarargs @SuppressWarnings("varargs") public static <T> List<T> asList(T... a) { return new ArrayList<>(a); } /** * @serial include */ 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; } @Override public Object[] toArray() { return a.clone(); } @Override @SuppressWarnings("unchecked") public <T> T[] toArray(T[] a) { int size = size(); if (a.length < size) return Arrays.copyOf(this.a, size, (Class<? extends T[]>) a.getClass()); System.arraycopy(this.a, 0, a, 0, size); if (a.length > size) a[size] = null; return a; } @Override public E get(int index) { return a[index]; } @Override public E set(int index, E element) { E oldValue = a[index]; a[index] = element; return oldValue; } @Override public int indexOf(Object o) { E[] a = this.a; if (o == null) { for (int i = 0; i < a.length; i++) if (a[i] == null) return i; } else { for (int i = 0; i < a.length; i++) if (o.equals(a[i])) return i; } return -1; } @Override public boolean contains(Object o) { return indexOf(o) != -1; } @Override public Spliterator<E> spliterator() { return Spliterators.spliterator(a, Spliterator.ORDERED); } @Override public void forEach(Consumer<? super E> action) { Objects.requireNonNull(action); for (E e : a) { action.accept(e); } } @Override public void replaceAll(UnaryOperator<E> operator) { Objects.requireNonNull(operator); E[] a = this.a; for (int i = 0; i < a.length; i++) { a[i] = operator.apply(a[i]); } } @Override public void sort(Comparator<? super E> c) { Arrays.sort(a, c); } } }
Arrays.ArrayList 是工具类 Arrays 的一个内部静态类,它没有完全实现List的方法,而 ArrayList直接实现了List 接口,实现了List所有方法。
Arrays.ArrayList将外部数组的引用直接通过“=”赋予内部的泛型数组,所以本质指向同一个数组。
4、 数组转化为list方式:
a):如果是在spring框架下开发:
import org.springframework.util.CollectionUtils;
CollectionUtils.arrayToList(arr);
b):遍历
for(String str:arryList){
list.add(str);
}
c):Collections工具类
Collections.addAll(list, "a","b","c");
原文地址:https://www.cnblogs.com/enhance/p/11004196.html