Java中ArrayList学习笔记
Java中ArrayList学习笔记
- 先看两段代码
这段代码在执行的时候会报
但是这样写就好着呢:
总结,研究报错的代码 ,在for循环的时候调用next()方法,next方法中调用了checkForComodification这个方法,这个方法里面判断modCount和expectedModCount不相等的时候就抛出ConcurrentModificationException这个异常。
原因:当for循环执行的时候首先调用了
这个方法,这个方法初始化了expectedModCount=modCount,modCount的值是在add方法里面复制的,如当前程序为8,初始化给expectedModCount的值。当调用remove 方法的时候,将modCount++; 导致下一次循环的时候两个值不相同,就会报这个错误。
这里还有个知识点:
modCount 这个变量被transient关键字修饰,意思是不可被序列化。
参考文档:https://www.cnblogs.com/chenpi/p/6185773.html
- 解决办法:
for (int i = students.size() - 1; i >= 0; i--) {
if (students.get(i).equals("李四")) { students.remove(i); }
}
注意倒叙删除。正序删除的时候由于size一直变小,可能后面的删除不了。
Iterator iterator = students.iterator();
while (iterator.hasNext()) {
if (iterator.next().equals("李四")) iterator.remove();
}
用iterator的remove方法可以删除,因为remove方法中将expectedModCount=modCount。
- 多线程问题
这段代码在执行的时候有时候会报错,就是在方法内部调用 next方法的时候expectedModCount和modCount的值不一致引起的。
解决方案:
用CopyOnWriteArrayList方法,注意这个方法没有实现iterator.remove()。CopyOnWriteArrayList 里面在操作数据都用Lock进行了处理,但是有个方法getArray()没有lock。
- ConcurrentHaspMap它也是线程安全的,它里面是通过synchronized实现的。
原文地址https://www.cnblogs.com/baoyi/p/java_arrayList.html
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
2018-05-14 代码考古-Python3官方教程字典例程
知乎原链 Data Structures中的第一个例程: >>> tel = {'jack': 4098, 'sape': 4139} >>> tel['guido'] = 4127 >>> tel {'sape': 4139, 'guido': 4127, 'jack': 4098} >>> tel['jack'] 4098 >>> del tel['sape'] >>> tel['irv'] = 4127 >>> tel {'guido': 4127, 'irv': 4127, 'jack': 4098} >>> list(tel.keys()) ['irv', 'guido', 'jack'] >>> sorted(tel.keys()) ['guido', 'irv', 'jack'] >>> 'guido' in tel True >>> 'jack' not in tel Fal...
- 下一篇
Python爬虫入门教程 15-100 石家庄政民互动数据爬取
1. 石家庄政民互动数据爬取-写在前面 今天,咱抓取一个网站,这个网站呢,涉及的内容就是 网友留言和回复,特别简单,但是网站是gov的。网址为http://www.sjz.gov.cn/col/1490066682000/index.html 首先声明,为了学习,绝无恶意抓取信息,不管你信不信,数据我没有长期存储,预计存储到重装操作系统就删除。 2. 石家庄政民互动数据爬取-网页分析 点击更多回复 ,可以查看到相应的数据。 数据量很大14万条,,数据爬完,还可以用来学习数据分析,真是nice 经过分析之后,找到了列表页面。数据的爬取这次我们采用的是 selenium ,解析页面采用lxml,数据存储采用pymongo ,关于selenium 你可以去搜索引擎搜索相关的教程,好多的,主要就是打开一个浏览器,然后模拟用户的操作,你可以去系统的学习一下。 3. 石家庄政民互动数据爬取-撸代码 导入必备模块 from selenium import webdriver from selenium.common.exceptions import TimeoutException from se...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Mario游戏-低调大师作品
- CentOS关闭SELinux安全模块
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Red5直播服务器,属于Java语言的直播服务器
- CentOS8编译安装MySQL8.0.19
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS6,CentOS7官方镜像安装Oracle11G