网站建设情况报告范文,wordpress用户注册提醒,阿里云网站方案建设书模板,创意灵感网站很多文章都介绍过这些坑#xff0c;本文做个记录#xff0c;并提供解决方案。
1.Arrays.asList的坑 1.1现象 情况1#xff1a;通过Arrays.asList方法生成的List数据不支持添加操作 使用Arrays.asList方法生成的List数据#xff0c;不能对其进行删除或者添加操作。代码示例… 很多文章都介绍过这些坑本文做个记录并提供解决方案。
1.Arrays.asList的坑 1.1现象 情况1通过Arrays.asList方法生成的List数据不支持添加操作 使用Arrays.asList方法生成的List数据不能对其进行删除或者添加操作。代码示例如下 public static void main(String[] args) {ListString newList Arrays.asList(1, 2);newList.add(3);} 报错信息如下
Exception in thread main java.lang.UnsupportedOperationExceptionat java.util.AbstractList.add(AbstractList.java:148)at java.util.AbstractList.add(AbstractList.java:108)at com.yangsh.meal.utils.ListUtils.main(ListUtils.java:15)
结论1通过Arrays.asList方法生成的List数据不支持添加操作 情况2通过Arrays.asList方法生成的List数据受原数组影响 public static void main(String[] args) {String[] arrays new String[]{1,2,3};ListString newList Arrays.asList(arrays);System.out.println(newList);arrays[2] 4;System.out.println(newList);} 打印内容如下
[1, 2, 3]
[1, 2, 4]
结论2通过Arrays.asList方法生成的List数据受原数组影响原数组改变后新生成的List数据也会有同样的改变
1.2 解决方案
本文提供一个数组生成List的方法方法如下
package com.yangsh.meal.utils;import java.util.ArrayList;
import java.util.List;/*** author jzhou* DESC 数组工具类* date 2023/12/24 17:39*/
public class ArraysUtils {public static T ListT asList(T[] a) {List newList new ArrayList(a.length);for (int i 0; i a.length; i) {newList.add(a[i]);}return newList;}
}
测试代码 public static void main(String[] args) {String[] arrays new String[]{1,2,3};ListString newList ArraysUtils.asList(arrays);System.out.println(newList);arrays[2] 4;System.out.println(原数组修改不影响新生成的List数据);System.out.println(newList);newList.add(5);System.out.println(新数组支持add操作);System.out.println(newList);}
打印信息如下
[1, 2, 3]
原数组修改不影响新生成的List数据
[1, 2, 3]
新数组支持add操作
[1, 2, 3, 5]
至此问题得以解决。当然还有其它的方式比如使用stream方式。
2. list.subList的坑
2.1现象 先看代码和打印信息代码如下 Testpublic static void testSubList(){ListString list new ArrayList(5);list.add(1);list.add(2);list.add(3);ListString subList list.subList(1, 2);list.add(4);for (int i 0; i subList.size(); i) {System.out.println(subList.get(i));}} 打印信息
Exception in thread main java.util.ConcurrentModificationExceptionat java.util.ArrayList$SubList.checkForComodification(ArrayList.java:1239)at java.util.ArrayList$SubList.size(ArrayList.java:1048)
结论list使用subList方法如果再操作list后不能遍历subList生成的数据否则报错。
2.2解决方案 可以再写一个静态方法代码如下 public static List newSubList(List list,int fromIndex,int toIndex){ArrayListObject subList new ArrayList();for (int i 0; i list.size(); i) {if(i toIndex){ return subList; }if(i fromIndex){subList.add(list.get(i));}}return subList;} 测试一下打印信息如下 至此问题解决。