List集合中的add和remove的问题
2017-11-22 22:35
211 查看
这是一个刷新三观的问题:
![](https://img-blog.csdn.net/20171122221449817?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdHVlc2RheW1h/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
是的,你没有看错,list竟然不支持remove方法,那么这是为什么呢???
原因在于:
1、上述代码中Arrays.asList(strings)返回的list并不是我们所认知的ArrayList,我们可以点击asList这个方法,查看他的源代码
![](https://img-blog.csdn.net/20171122221858826?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdHVlc2RheW1h/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
他给我们返回的是一个Arrays这个类的一个内部类,这个类虽然和我们认知的ArrayList一样继承的都是AbstractList这个抽象类,但是这个内部类并没有重写add和remove这两个方法,而我们认知的ArrayList是重写了这两个方法
![](https://img-blog.csdn.net/20171122222606793?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdHVlc2RheW1h/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
那么没有重写这两个方法的内部类,当然调用的是父类(AbstractList)中的这两个方法,我们在来看看AbstractList这个类中的这两个方法
![](https://img-blog.csdn.net/20171122222752183?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdHVlc2RheW1h/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
看到这,我想大家都应该明白了,为什么直接使用add和remove这两个方法会报异常了吧
解决办法:
可以说非常庆幸的是ArrayList为我们提供了一个构造方法,参数刚好可以为那个内部类,这样一来就能转为我们认知的ArrayList类。即:List list1 = new ArrayList(Arrays.asList(strings));
![](https://img-blog.csdn.net/20171122225210161?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdHVlc2RheW1h/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
4000
是的,你没有看错,list竟然不支持remove方法,那么这是为什么呢???
原因在于:
1、上述代码中Arrays.asList(strings)返回的list并不是我们所认知的ArrayList,我们可以点击asList这个方法,查看他的源代码
他给我们返回的是一个Arrays这个类的一个内部类,这个类虽然和我们认知的ArrayList一样继承的都是AbstractList这个抽象类,但是这个内部类并没有重写add和remove这两个方法,而我们认知的ArrayList是重写了这两个方法
那么没有重写这两个方法的内部类,当然调用的是父类(AbstractList)中的这两个方法,我们在来看看AbstractList这个类中的这两个方法
看到这,我想大家都应该明白了,为什么直接使用add和remove这两个方法会报异常了吧
解决办法:
可以说非常庆幸的是ArrayList为我们提供了一个构造方法,参数刚好可以为那个内部类,这样一来就能转为我们认知的ArrayList类。即:List list1 = new ArrayList(Arrays.asList(strings));
4000
相关文章推荐
- Arrays.aslist新建的list集合不能add(),set(),remove()你知道吗?
- Java 数组转换成List,然后执行add或remove抛异常UnsupportedOperationException问题的解决
- Arrays.asList() 得到 集合 执行 add() 和 remove() 抛 UnsupportedOperationException 异常
- List 集合remove问题
- List 集合remove问题
- List集合remove元素的问题
- list,set等集合遍历时,不能remove集合中的元素。需要new一个Object或者list,set,里面add需要删除的元素,等集合遍历完了进行remove(Object)或者removeAll(list/set)操作
- 自己实现LinkedList集合add,get,remove
- Java 数组转换成List,然后执行add或remove抛异常UnsupportedOperationException问题的解决
- list.remove()时出问题,集合的remove方法注意事项
- List集合remove元素的问题
- List集合remove元素的问题
- List集合remove元素的问题
- list.add时的数据覆盖问题
- List中使用remove出错的问题分析
- list中remove的问题,以及 ConcurrentModificationException异常
- list.add(),向List集合插入对象报空指针异常
- 数组转换为List(Arrays.asList)后add或remove出现UnsupportedOperationException
- List使用add方法添加对象-只显示最后添加的数据的问题
- 数组转换为List(Arrays.asList)后add或remove出现UnsupportedOperationException