1. 现象:将数组转为List后进行removeAll()操作,报java.lang.UnsupportedOperationException错误。
代码:
/** * 获取标记ID * @return 标记ID */ private Long getSignId() { Long[] signIds = {1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 20L, 21L, 22L, 23L, 24L, 25L, 26L, 27L, 28L, 29L, 30L, 31L, 32L, 33L, 34L, 35L, 36L, 37L, 38L, 39L, 40L, 41L, 42L, 43L, 44L, 45L, 46L, 47L, 48L, 49L, 50L}; List<Long> allSignIds = Arrays.asList(signIds); List<Long> existsSignIds = groupManageMapper.findSignId(); // 留下未用的标记ID allSignIds.removeAll(existsSignIds); return allSignIds.size() == 0 ? null : allSignIds.get(0); }
错误:
java.lang.UnsupportedOperationException at java.util.AbstractList.remove(AbstractList.java:161) at java.util.AbstractList$Itr.remove(AbstractList.java:374) at java.util.AbstractCollection.removeAll(AbstractCollection.java:376)
解决方式:
/** * 获取标记ID * @return 标记ID */ private Long getSignId() { Long[] signIds = {1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 20L, 21L, 22L, 23L, 24L, 25L, 26L, 27L, 28L, 29L, 30L, 31L, 32L, 33L, 34L, 35L, 36L, 37L, 38L, 39L, 40L, 41L, 42L, 43L, 44L, 45L, 46L, 47L, 48L, 49L, 50L}; List<Long> allSignIds = new ArrayList<>(Arrays.asList(signIds)); List<Long> existsSignIds = groupManageMapper.findSignId(); // 留下未用的标记ID allSignIds.removeAll(existsSignIds); return allSignIds.size() == 0 ? null : allSignIds.get(0); }
详解:数组转化为List的注意点
A. 该方法不适用于基本数据类型(byte,short,int,long,float,double,boolean,char);
B. 该方法将数组与列表链接起来,当更新其中之一时,另一个自动更新;
C. 不支持add、remove、removeAll和clear方法。
原文:https://www.cnblogs.com/ruhuanxingyun/p/10598000.html