java 使用subList痛彻心扉的领悟
背景
刚开始截取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痛彻心扉的领悟相关推荐
- Java SubList 类 Java subList方法 Java ArrayList$SubList 方法特点 SubList 用法
Java SubList 类 Java subList方法 Java ArrayList$SubList 方法特点 SubList 用法 一.概述 在java集合中,常用ArrayList类中,若需要 ...
- java List.subList方法中的超级大陷阱
java List.subList方法中的超级大陷阱 2012-06-26 10:13:18| 分类: java 基础知识 | 标签:java集合使用 java基础 |举报|字号 订阅 下载L ...
- 3des加密 java php_php 3des加密 兼容JAVA 多么痛的领悟呀
最近和别人做接口用到SOCKET TCP/IP方式 其中需要对账号和密码进行3DES加密 对方提供了一个加密比对的软件和JAVA的实现代码 并且给了我们一个长度为32位的密钥 这边需要用PHP来实现! ...
- java sublist_Java subList的使用
1. 在看<阿里巴巴java编程手册的时候>有如下强制约束 顺便学了一下subList. java.util.List中有一个subList方法,用来返回一个list的一部分的视图. Li ...
- Java集合subList使用注意事项
作者:chenssy 来源:CSDN 原文:https://blog.csdn.net/chenssy/article/details/44102915 我们经常使用subString方法来对St ...
- java list sublist方法_(转)Java 中 List.subList() 方法的使用陷阱
原文:http://blog.csdn.net/cleverGump/article/details/51105235 前言 本文原先发表在我的 iteye博客: http://clevergump. ...
- java list sublist方法_聊聊ArrayList中的subList方法
开发过程中遇到的坑 开发过程经常会使用subList做分页处理. 比如下面的代码 while(pageIndex < maxSize) { List temp = userIds.subList ...
- java sublist_java 中sublist的使用
http://blog.csdn.net/sbfivwsll/article/details/6557611 java List.subList方法中的超级大陷阱 在使用集合中,可能常常需要取集合中的 ...
- java sublist 用法_Java ArrayList subList() 使用方法及示例
Java ArrayList subList() 使用方法及示例 Java ArrayList subList()方法提取一部分arraylist并将其返回. subList()方法的语法为: arr ...
最新文章
- 解题报告:Fake Maxpooling(单调队列求矩阵的和)
- Runtime实战之定制TabBarItem大小
- IIS 支持 ajax 跨域
- android常用代码
- Java中的主类概念以及public static void main方法的分析
- php页面get方法实现ajax,入门实例教程
- c51单片机有几个终端语言,吃过大亏,才知道要从51单片机入手
- python3字符串属性(二)
- [转载] java 中 date类型详解
- LeetCode每日一题——两数相加
- PHP中H5棋牌开发的异常处理
- 10. SQL 注入
- 读《自己动手写操作系统》(于渊著)第一节
- Unity2020打包ARCore项目apk
- IT资源专业搜索-www.easysoo.cn
- 云计算服务三层架构-IaaS-PaaS-SaaS解析
- 港股配资系统搭建(适合量化交易)
- mediawiki修改用mysql数据库_MediaWiki定制化改动
- 2021.04.13丨sRNAnalyzer报错fastx_collapser: Invalid input: This looks like a multi-line FASTA file解决办法
- 【C++课程设计项目】歌手评分系统(代码量1500行含设计文档)
热门文章
- 沉没的泰坦尼克号的幸存者数据分析
- 百万投资血本无归,细数外汇资金盘《云腾科技》的八宗罪
- 从联想昭阳到MacBook Pro,致我的那些败家玩意——电脑
- 对PyTorch的dim的理解
- 纯C++实现24位bmp格式图片的读取和修饰
- 视频教程-微信小程序系统教程Java版[3/3阶段]_微信小程序电商系统-微信开发
- etc通行费发票怎么打印?通行费发票打印步骤
- 【Unity3D-Mirror多人坦克大战】生命盾牌物品的创建、物品动画的创建(九)
- 孙陶然:成功者风光的背后是和你一样的坎坷
- 2021年安全员-C证(江西省)考试报名及安全员-C证(江西省)证考试