java探索之集合——Arrays.asList()方法

     之前,写了一个读取文件返回行记录数组String[] lines;之后又写了一个处理方法,形参为List的字符串列表,方法中进行一翻处理将列表集合中某些对象删除,使用的是List中的remove(int index);或remove(Object obj);或removeAll(Collection obj);
    但是,当我使用Arrays.asList(lines)传递这个参数过去的时候,方法抛出 UnsupportedOperationException,搞不懂,为什么不支持,结果跟踪了一下。原来,Arrays.asList()方法返回的是ArrayList
  public static <T> List<T> asList(T... a) {
        return new ArrayList<T>(a);
    }
 看起来确实可以使用remove(int index);或remove(Object obj);或removeAll(Collection obj);等方法,但事实上这个ArrayList并不是我们常用的 java.util.ArrayList类,而是Arrays中自带的内部静态类

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

    ……
    }

   可以看到这个ArrayList继承于AbstractListAbstractList里确实有remove(int index)方法,但是你可以看到这个抽象类没有真正实现这个方法,仅仅抛出一个异常。

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

    问题就在于此,Arrays中的ArrayList类并没有重写这个remove方法,结果导致在我编写的方法中抛出异常。结果我只好迭代读取数组返回一个“真正的ArrayList”(java.util.ArrayList)来使用我那个方法。要不然的话,那还要自己做一个类去继承这个静态的ArrayList类重写方法。那可不怎么实用了。

     要真正了解java还真是十分困难,要是没有源码的支持,恐怕并不知道问题所在。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

悟V-SpHeNIC

支持科研技术

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值