Arrays.asList使用误区
Posted enhance
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Arrays.asList使用误区相关的知识,希望对你有一定的参考价值。
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");
以上是关于Arrays.asList使用误区的主要内容,如果未能解决你的问题,请参考以下文章