编码中的点点滴滴(1):慎用Arrays.asList函数
试运行如下代码,你猜会出现什么情况。
public static void main(String[] args){ String[] strs={"1","2","3","4"}; System.out.println(Arrays.asList(strs).remove(0)); }
如果没有没错,你一般会说是:1。但是实际上返回的是:
Exception in thread "main" java.lang.UnsupportedOperationException at java.util.AbstractList.remove(AbstractList.java:144) at com.lmax.disruptor.YieldingWaitStrategy.main(YieldingWaitStrategy.java:126)
为什么会出现这种情况?因为我们认为JDK会返回一个ArrayList或者LinkedList,所直接调用remove(int index)方法。实际上asList返回的时什么呢?asList返回的是Arrays类内部自定义的AbstractList的子类,它没有实现remove方法。
如何避免这种情况发生呢?
public static void main(String[] args){ String[] strs={"1","2","3","4"}; System.out.println(new LinkedList<String>(Arrays.asList(strs)).remove(0)); }
posted on 2012-07-24 21:50 small.ming 阅读(1418) 评论(0) 编辑 收藏 举报