通过Arrays.asList() 转换的list进行remove或者add操作时,报java.lang.UnsupportedOperationException
前段时间遇到的一个笔试题,题目大致如下:
问以上代码执行会不会报错,之前也没这么操作过,一时懵逼,然后回到家后第一时间就试了下,结果运行报错:
点进remove源码中,发现remove方法中是throw UnsupportedOperationException而且不作任何其他操作,然后通过查询资料找到了一个大致算正解的答案,说法大致为:
当调用Arrays.asList()生成的List进行add或者remove操作时会报异常,这是由于Arrays.asList() 返回的市Arrays的内部类ArrayList, 而不是java.util.ArrayList。Arrays的内部类ArrayList和java.util.ArrayList都是继承AbstractList,remove、add等方法AbstractList中是默认throw UnsupportedOperationException而且不作任何操作。java.util.ArrayList重写了这些方法而Arrays的内部类ArrayList没有重写,所以调用remove或者add方法时直接走了抛异常的方法。
解决这个问题的思路也很简单,既然通过Arrays.asList()生成的List的remove或者add方法没有重写,那再把Arrays.asList()生成的List转换为java.util.ArrayList再进行remove或者add操作即可,代码如下: