数组和list的转化注意点

Posted 蜗牛也有春天

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数组和list的转化注意点相关的知识,希望对你有一定的参考价值。

Arrays.asList方法返回的ArrayList是继承自AbstractList同时实现了RandomAccess和Serializable接口,定义如下:  

 private static class ArrayList<E> extends AbstractList<E>  
 implements RandomAccess, java.io.Serializable 

然后我们进一步看看AbstractList这个类的定义:  

 public abstract class AbstractList<E> extends AbstractCollection<E> implements List<E> 

这时我们发现AbstractList这个类的set() add() remove()方法定义如下:

    public void add(int index, E element) {
        throw new UnsupportedOperationException();
    }

    public E set(int index, E element) {
        throw new UnsupportedOperationException();
    }

    public E remove(int index) {
        throw new UnsupportedOperationException();
    }

现在知道了通过这种方式转化后的list使用这三个方法throw UnsupportedOperationException异常的原因了。  

通过上面的分析,我们知道,其实通过asList方法得到的List是只读的,那么平时我们怎样避免这样的错误发生?我们可以采用如下方法:  

 

    List<Integer> list = new ArrayList<>(Arrays.asList(数组));

通过new一个新的对象的方式,避开转化后只读的现象。能够正常的使用上述三种方法。

以上是关于数组和list的转化注意点的主要内容,如果未能解决你的问题,请参考以下文章

java中 我想把集合转化为数组

java list和数组之间的相互转化

java中String数组和List的互相转化

java中怎么删除数组中的元素?

将泛型List<?> data集合转化为数组、Map

浅谈Arrays.asList()方法的使用