背景

刚开始截取List集合时使用笨的方法自己截取,后来发现Java api 有方法使用 subList方法,但是由于不清楚原理拿来就用,做项目就掉坑里了

List<UclassUser> subList = list.subList(0, GameRoom.CAPACITY / 2);subList.forEach(item -> {item.setRoomId(newRoom.getId());newRoom.getStuList().add(item.getUserId());});list.removeAll(subList);studentAlreadyList.addAll(subList);

就是这些代码报的错,大家可以自行去看

查看源码

原来subList方法是new 了一个SubList对象把原来的list引用传了进去,所以返回的SubList对象,SubList对象也只是源集合的影像,不是新的List,所以你要是操作源集合,那么就会报异常

throw new ConcurrentModificationException()

这种类型的异常 fail-fast,在Java中叫快速失败,有兴趣的可以去查资料

public List<E> subList(int fromIndex, int toIndex) {subListRangeCheck(fromIndex, toIndex, size);return new SubList(this, 0, fromIndex, toIndex);}static void subListRangeCheck(int fromIndex, int toIndex, int size) {if (fromIndex < 0)throw new IndexOutOfBoundsException("fromIndex = " + fromIndex);if (toIndex > size)throw new IndexOutOfBoundsException("toIndex = " + toIndex);if (fromIndex > toIndex)throw new IllegalArgumentException("fromIndex(" + fromIndex +") > toIndex(" + toIndex + ")");}private class SubList extends AbstractList<E> implements RandomAccess {private final AbstractList<E> parent;private final int parentOffset;private final int offset;int size;SubList(AbstractList<E> parent,int offset, int fromIndex, int toIndex) {this.parent = parent;this.parentOffset = fromIndex;this.offset = offset + fromIndex;this.size = toIndex - fromIndex;this.modCount = ArrayList.this.modCount;}

总结

最后解决办法用新的list去接受一下,就可以操作原来的集合了

 List<UclassUser> subList = new ArrayList<>(list.subList(0, GameRoom.CAPACITY / 2));subList.forEach(item -> {item.setRoomId(newRoom.getId());newRoom.getStuList().add(item.getUserId());});list.removeAll(subList);studentAlreadyList.addAll(subList);

java 使用subList痛彻心扉的领悟相关推荐

  1. Java SubList 类 Java subList方法 Java ArrayList$SubList 方法特点 SubList 用法

    Java SubList 类 Java subList方法 Java ArrayList$SubList 方法特点 SubList 用法 一.概述 在java集合中,常用ArrayList类中,若需要 ...

  2. java List.subList方法中的超级大陷阱

    java List.subList方法中的超级大陷阱 2012-06-26 10:13:18|  分类: java 基础知识 |  标签:java集合使用  java基础  |举报|字号 订阅 下载L ...

  3. 3des加密 java php_php 3des加密 兼容JAVA 多么痛的领悟呀

    最近和别人做接口用到SOCKET TCP/IP方式 其中需要对账号和密码进行3DES加密 对方提供了一个加密比对的软件和JAVA的实现代码 并且给了我们一个长度为32位的密钥 这边需要用PHP来实现! ...

  4. java sublist_Java subList的使用

    1. 在看<阿里巴巴java编程手册的时候>有如下强制约束 顺便学了一下subList. java.util.List中有一个subList方法,用来返回一个list的一部分的视图. Li ...

  5. Java集合subList使用注意事项

    作者:chenssy  来源:CSDN  原文:https://blog.csdn.net/chenssy/article/details/44102915 我们经常使用subString方法来对St ...

  6. java list sublist方法_(转)Java 中 List.subList() 方法的使用陷阱

    原文:http://blog.csdn.net/cleverGump/article/details/51105235 前言 本文原先发表在我的 iteye博客: http://clevergump. ...

  7. java list sublist方法_聊聊ArrayList中的subList方法

    开发过程中遇到的坑 开发过程经常会使用subList做分页处理. 比如下面的代码 while(pageIndex < maxSize) { List temp = userIds.subList ...

  8. java sublist_java 中sublist的使用

    http://blog.csdn.net/sbfivwsll/article/details/6557611 java List.subList方法中的超级大陷阱 在使用集合中,可能常常需要取集合中的 ...

  9. java sublist 用法_Java ArrayList subList() 使用方法及示例

    Java ArrayList subList() 使用方法及示例 Java ArrayList subList()方法提取一部分arraylist并将其返回. subList()方法的语法为: arr ...

最新文章

  1. 解题报告:Fake Maxpooling(单调队列求矩阵的和)
  2. Runtime实战之定制TabBarItem大小
  3. IIS 支持 ajax 跨域
  4. android常用代码
  5. Java中的主类概念以及public static void main方法的分析
  6. php页面get方法实现ajax,入门实例教程
  7. c51单片机有几个终端语言,吃过大亏,才知道要从51单片机入手
  8. python3字符串属性(二)
  9. [转载] java 中 date类型详解
  10. LeetCode每日一题——两数相加
  11. PHP中H5棋牌开发的异常处理
  12. 10. SQL 注入
  13. 读《自己动手写操作系统》(于渊著)第一节
  14. Unity2020打包ARCore项目apk
  15. IT资源专业搜索-www.easysoo.cn
  16. 云计算服务三层架构-IaaS-PaaS-SaaS解析
  17. 港股配资系统搭建(适合量化交易)
  18. mediawiki修改用mysql数据库_MediaWiki定制化改动
  19. 2021.04.13丨sRNAnalyzer报错fastx_collapser: Invalid input: This looks like a multi-line FASTA file解决办法
  20. 【C++课程设计项目】歌手评分系统(代码量1500行含设计文档)

热门文章

  1. 沉没的泰坦尼克号的幸存者数据分析
  2. 百万投资血本无归,细数外汇资金盘《云腾科技》的八宗罪
  3. 从联想昭阳到MacBook Pro,致我的那些败家玩意——电脑
  4. 对PyTorch的dim的理解
  5. 纯C++实现24位bmp格式图片的读取和修饰
  6. 视频教程-微信小程序系统教程Java版[3/3阶段]_微信小程序电商系统-微信开发
  7. etc通行费发票怎么打印?通行费发票打印步骤
  8. 【Unity3D-Mirror多人坦克大战】生命盾牌物品的创建、物品动画的创建(九)
  9. 孙陶然:成功者风光的背后是和你一样的坎坷
  10. 2021年安全员-C证(江西省)考试报名及安全员-C证(江西省)证考试