建设银行 北京招聘网站,北京房价,培训网站开发公司,WordPress怎么修改根目录谁再用Arrays.asList就开除谁
hi#xff0c;我是achang#xff0c;今天说一个使用Arrays.asList后对应出现的一系列坑#xff0c;因为他有那么多坑#xff0c;所以会有开玩笑的说#xff1a;谁再用Arrays.asList就开除谁
那Arrays.asList的作用很简单#xff0c;就是把…谁再用Arrays.asList就开除谁
hi我是achang今天说一个使用Arrays.asList后对应出现的一系列坑因为他有那么多坑所以会有开玩笑的说谁再用Arrays.asList就开除谁
那Arrays.asList的作用很简单就是把传入多参 或者 数组 直接转化为 List如下代码
ListString list Arrays.asList(1, 2, 3);一、List转化坑
通过这样子的调用就可以获得一个装有1,2,3的List 如果如上图写编写使用的话最终会获得一个长度为1的List集合而并非为长度为3的List集合。
这个问题的出现是当我们使用一个基本类型的数组作为入参的时他不会把基本数组中的每个元素作为List转化而是把基本类型数组作为整体转化为List中的1个元素。
那如果想要解决上面的问题就想要把基本类型数组改为包装类Integer就可以解决。 二、UnsupportedOperationException坑
当用Arrays.asList创建出来的List对象使用如add()等方法时就会抛出UnsupportedOperationException异常。 如上报错的原因是调用Arrays.asList时创建的List对象时Arrays类的内部类对象而这个内部类的List是继承的AbstractList类他并没重写add()方法。 AbstractList类中的add方法默认就是抛出UnsupportedOperationException异常 三、引用问题
Arrays.asList生成的List后当修改原来数组的值会发现用Arrays.asList生产的List也会修改值。 针对二、三这样子的坑解决方案
如果要对创建的List进行增删操作的话建议直接new ArraysList如下图所示 针对原来基本数组的元素修改时发现并不会影响 对生成的List对象进行调用add()方法发现不会抛出UnsupportedOperationException异常 四、总结
针对Arrays.asList对应的坑所以不推荐使用Arrays.asList来直接从根源上避免出现坑。 不然就想要注意在使用中的场景是否符合你的要求如不对Arrays.asList创建的List进行增删改的操作。
建议统一的使用一个数组转ArrayList的工具类要么自己实现要呢推荐已有的工具类如com.google.common.collect等等