-
删除 Map 中不满足条件的元素
2015-01-30 09:51:03//删除值为空的项 //集合类的都不能在循环的时候删除,因为删除元素后集合发生改变继而不能循环了 for(String str : addMap.keySet()) { double value = addMap.get(str); if(value == 0.0) {//删除值为空的项 //集合类的都不能在循环的时候删除,因为删除元素后集合发生改变继而不能循环了 for(String str : addMap.keySet()) { double value = addMap.get(str); if(value == 0.0) { addMap.remove(str); } } Set mapset = addMap.entrySet(); Iterator iterator = mapset.iterator(); while(iterator.hasNext()) { Map.Entry mapEntry = (Map.Entry)iterator.next(); String key = mapEntry.getKey().toString(); Double value =(Double)mapEntry.getValue(); if(value == 0.0) { iterator.remove(); } }
第一种删除方式是错误的,因为集合在循环的时候不能删除元素,否则会导致集合发生改变,继而跳出循环,不能正确执行循环的过程。
第二种删除循环的方式是正确的,因为只是对 Map 中元素循环一遍。而且需要注意的是:在遍历过程中是不能用map.remove(key),而是用keys.remove().
-
java.util.ConcurrentModificationException已解决,计算Java List(Map)中的重复项出现次数
2020-11-06 14:28:21我是在for循环中对list集合进行操作,爆出这个异常java.util.ConcurrentModificationException,如果尝试对集合做一些操作(例如删除元素,该表集合),可能会抛出java.util.ConcurrentModificationException的异常...功能:求list集合中元素出现的个数。并输出。
我是在for循环中对list集合进行操作,爆出这个异常java.util.ConcurrentModificationException,如果尝试对集合做一些操作(例如删除元素,该表集合),可能会抛出java.util.ConcurrentModificationException的异常。在下面这个for循环中,对list集合进行添加,导致死循环。
List list=new ArrayList<>();
List specialtyList = new ArrayList();
List specialIdList =new ArrayList();int count=0; for (String str : specialIdList) { if(str!=null && str.length()>0){ String[] specialIds = str.split(","); for (String specialId : specialIds) { count=0; for (Specialty specialty : specialtyList) { if(specialId.equals(Integer.toString(specialty.getId()))){ if(list.size()>0){ for (SpecialityCount specialityCount : list) { if(specialityCount.getSpecial().equals(specialty.getSpecial())){ Integer num = specialityCount.getCount(); list.add(new SpecialityCount(num++,specialityCount.getSpecial())); } } } count++; list.add(new SpecialityCount(count,specialty.getSpecial())); } } } }
显然,这种方法不能满足我们的需求,这时候,我们可以用map集合去执行这段逻辑,比较简单。
**List specialList = new ArrayList<>();
specialList .add(“a”);
specialList .add(“a”);
specialList .add(“b”);
Map<String,Integer> map = new HashMap();
for (String temp : specialList) {
Integer count = (Integer) map.get(temp);
map.put(temp, (count == null) ? 1 : count + 1);
}
for (Map.Entry entry : map.entrySet()) {
System.out.println("Key-value : " + entry.getKey() + "- "
+ entry.getValue());
}
输出结果
Key-value : a- 2
Key-value : b- 1
** -
Qt::QMap在for循环中使用erase的用法注意
2014-10-18 12:09:46QMap在for循环中使用erase的用法注意 QMap中erase后,itertator it指针已经被是否,再次调用将崩溃。erase函数返回指向删除后下一条数据的地址。 若使用for循环进行操作时,若内部使用erase操作,则it++操作需要放...QMap中erase后,itertator it指针已经被是否,再次调用将崩溃。erase函数返回指向删除后下一条数据的地址。
若使用for循环进行操作时,若内部使用erase操作,则it++操作需要放到函数体内部,与erase区别开来。
例如:
Map中存入0-9的一一对应的映射,要删除其中的偶数项。
#include <QMap>
#include <QDebug>
#include <QtCore/QCoreApplication>
//!测试map中erase函数在for循环中iterator指针的使用方式
//!测试删除0~9中的偶数项
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QMap<int, int> mapIntToInt;
for(int i = 0; i < 10; i ++)
{
mapIntToInt.insert(i, i);
}
QMap<int, int>::iterator it;
QMap<int, int>::iterator ait;
for (it = mapIntToInt.begin();it != mapIntToInt.end(); )
{
int num = it.key();
qDebug() << "thecurrent number is " << num;
if (num % 2 == 0)
{
mapIntToInt.erase(it);
qDebug() << "erasenumber : " << num;
}
else
{
it++;
}
}
system("pause");
return a.exec();
}
这样,输出结果为:
the current numberis 0
erase number : 0
the current numberis 1
the current numberis 2
erase number : 2
the current numberis 3
the current numberis 4
erase number : 4
the current numberis 5
the current numberis 6
erase number : 6
the current numberis 7
the current numberis 8
erase number : 8
the current numberis 9
若for循环中采用
for (it= mapIntToInt.begin();it != mapIntToInt.end(); it++)
{
int num = it.key();
qDebug()<< "the current number is "<< num;
if (num % 2 == 0)
{
mapIntToInt.erase(it);
qDebug()<< "erase number : "<< num;
}
}
将会崩溃。因为mapIntToInt.erase(it);操作后,it指针被释放,地址变成了0xfeeefeee,再次调用it++ 就会崩溃。(0xfeeefeee的含义为: 指针指向的空间已经被DELETE释放掉,但程序在未给该指针重新赋值前,又错误的调用了这个无效的指针)
因此,对QMap进行erase操作时,要注意这一点。
另外,个人建议,若在erase操作后,还要对给iterator it进行操作时,最好使用it = mapIntToInt.erase(it)的形式,防止再次调用it时,遇到与上面相同的问题。
-
QT类学习系列(9)- Qt::QMap在for循环中使用erase的用法注意
2019-04-15 19:59:14QMap中erase后,itertator it指针已经被是否,再次调用将崩溃。erase函数返回指向删除后下一条数据的地址。...Map中存入0-9的一一对应的映射,要删除其中的偶数项。 #include <QMap> #include <QDeb...QMap中erase后,itertator it指针已经被是否,再次调用将崩溃。erase函数返回指向删除后下一条数据的地址。
若使用for循环进行操作时,若内部使用erase操作,则it++操作需要放到函数体内部,与erase区别开来。
例如:
Map中存入0-9的一一对应的映射,要删除其中的偶数项。
#include <QMap> #include <QDebug> #include <QtCore/QCoreApplication> //!测试map中erase函数在for循环中iterator指针的使用方式 //!测试删除0~9中的偶数项 int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); QMap<int, int> mapIntToInt; for(int i = 0; i < 10; i ++) { mapIntToInt.insert(i, i); } QMap<int, int>::iterator it; QMap<int, int>::iterator ait; for (it = mapIntToInt.begin();it != mapIntToInt.end(); ) { int num = it.key(); qDebug() << "thecurrent number is " << num; if (num % 2 == 0) { mapIntToInt.erase(it); qDebug() << "erasenumber : " << num; } else { it++; } } system("pause"); return a.exec(); }
会崩溃!!!
解释:因为mapIntToInt.erase(it);操作后,it指针被释放,地址变成了0xfeeefeee,再次调用it++ 就会崩溃。(0xfeeefeee的含义为: 指针指向的空间已经被DELETE释放掉,但程序在未给该指针重新赋值前,又错误的调用了这个无效的指针)
因此,对QMap进行erase操作时,要注意这一点。
另外,个人建议,若在erase操作后,还要对给iterator it进行操作时,最好使用it = mapIntToInt.erase(it)的形式,防止再次调用it时,遇到与上面相同的问题。如下:
for (it = mapIntToInt.begin();it != mapIntToInt.end(); ) { int num = it.key(); qDebug() << "thecurrent number is " << num; if (num % 2 == 0) { it = mapIntToInt.erase(it); qDebug() << "erasenumber : " << num; } else { it++; } }
这样,输出结果为:
the current numberis 0
erase number : 0
the current numberis 1
the current numberis 2
erase number : 2
the current numberis 3
the current numberis 4
erase number : 4
the current numberis 5
the current numberis 6
erase number : 6
the current numberis 7
the current numberis 8
erase number : 8
the current numberis 9
备注:使用QList<T,T>::iterator等等都要注意这个问题;
-
JavaScript的Array的forEach(),map()
2019-06-11 16:51:32forEach(): 按索引值升序顺序,遍历每一项 .不直接改变原数组,但如果在其callback中操作数组(回调中的第...遍历时新添加的项不会被遍历到,若原有项发生改变,便利的是在遍历它时当下的值,若被删除则不会被遍历... -
C++ unordered_map remove 实现哈希表移除
2017-12-15 13:32:00使用C++的unordered_map类型时,我们经常要根据关键字查找,并移除一组映射,在Java中直接用remove即可,而STL中居然没有实现remove这个函数,还要自己写循环来查找要删除项,然后用erase来清除,我也是醉了,参见... -
在Form表单中校验复杂对象(嵌套属性)
2021-01-04 03:55:56-- 微信小程序中,将一个参数设置空字符串,结果会变成字符串"true" --> <view class="u-form-item--left" :style="{ width: uLabelWidth, flex: `0 0 ${... -
最权威的C++教程_C++_Primer_Plus中文第五版+C++_Primer中文第四版(都含源码+习题)(共4分卷)分卷1
2010-06-23 17:33:55储在对象中的信息以及可对对象执行的操作(类方法)。对象的某些组成部分对于外界来说是可见的(公有部 分),而某些部分却是隐藏的(私有部分)。特殊的类方法(构造函数和析构函数)在对象创建和释放时发挥作 用。在本... -
最权威的C++教程_C++_Primer_Plus中文第五版+C++_Primer中文第四版(都含源码+习题)(共4分卷)分卷2
2010-06-23 17:47:19储在对象中的信息以及可对对象执行的操作(类方法)。对象的某些组成部分对于外界来说是可见的(公有部 分),而某些部分却是隐藏的(私有部分)。特殊的类方法(构造函数和析构函数)在对象创建和释放时发挥作 用。在本... -
最权威的C++教程_C++_Primer_Plus中文第五版+C++_Primer中文第四版(都含源码+习题)(共4分卷)分卷3
2010-06-23 18:03:39储在对象中的信息以及可对对象执行的操作(类方法)。对象的某些组成部分对于外界来说是可见的(公有部 分),而某些部分却是隐藏的(私有部分)。特殊的类方法(构造函数和析构函数)在对象创建和释放时发挥作 用。在本... -
超级有影响力霸气的Java面试题大全文档
2012-07-18 09:47:04栈是一种线形集合,其添加和删除元素的操作应在同一段完成。栈按照后进先出的方式进行处理。 堆是栈的一个组成元素 22、forward 和redirect的区别 forward是服务器请求资源,服务器直接访问目标地址的URL,把... -
JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)
2013-05-07 17:18:072.3.1 在Eclipse中创建自己的第一个项目 28 2.3.2 在Eclipse中编写HelloWorld程序 29 2.3.3 通过Eclipse运行Hello World 31 2.4 小结:Eclipse——功能很强大 32 2.5 习题 32 第3章 Java中的基本数据类型和... -
Java入门1·2·3:一个老鸟的Java学习心得.PART2(共3个)
2013-05-07 17:19:142.3.1 在Eclipse中创建自己的第一个项目 28 2.3.2 在Eclipse中编写HelloWorld程序 29 2.3.3 通过Eclipse运行Hello World 31 2.4 小结:Eclipse——功能很强大 32 2.5 习题 32 第3章 Java中的基本数据类型和... -
Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)
2013-05-07 17:20:122.3.1 在Eclipse中创建自己的第一个项目 28 2.3.2 在Eclipse中编写HelloWorld程序 29 2.3.3 通过Eclipse运行Hello World 31 2.4 小结:Eclipse——功能很强大 32 2.5 习题 32 第3章 Java中的基本数据类型和... -
【MATLAB R2014a完全自学一本通】-第二部分(共两部分)真正的入门、进阶、实践
2016-04-24 14:04:04《MATLAB R2014a完全自学一本通》面向MATLAB 的初中级读者,在介绍MATLAB R2014a 集成环境的基础上,对MATLAB 使用中常用的知识和工具进行了详细的介绍,书中各章均提供了大量有针对性的算例,供读者实战练习。... -
【MATLAB R2014a完全自学一本通】-第一部分(共两部分)真正的入门、提高、实践
2016-04-24 13:24:3813.3 小波分析在图像处理中的应用 13.3.1 基于小波变换的图像局部压缩 13.3.2 二维小波变换的图像压缩 13.3.3 图像压缩中阈值的确定与作用命令 13.3.4 基于小波包变换的图像压缩 13.3.5 小波变换用于图像... -
wince的GPS模拟器
2014-01-04 01:06:02航迹重播时具有丰富的控制项,可快进、快退,选择某个段,反序,循环,亦可 人为加入左右偏移。 载入航迹时可选过滤掉点数少或距离小的段。 可选与PC版OziExplorer交互运行。通过Ozi API,在Ozi中双击地图上的某点... -
数控车床仿真模拟软件
2011-08-18 14:05:15在您使用本软件的过程中,如果有什么好的意见和建议,或者有什么问题您不能解决的, 欢迎您来电、来信、Email和我们联系!联系方式如下: 地址:广州市罗冲围螺涌北路一街52号 邮编:510165 公司:广州数控... -
Java经典编程300例(code)
2013-01-09 10:26:53实例171 从RAR压缩包中删除文件 237 实例172 在压缩文件中查找字符串 238 实例173 重命名RAR压缩包中文件 239 实例174 创建自解压RAR压缩包 240 第13章 枚举类型与泛型 242 实例175 查看枚举类型的定义 243 实例176 ... -
《Java开发实战1200例(第I卷)》(李钟尉.陈丹丹).part2 高清完整PDF版
2016-06-13 15:53:27本书以开发人员在项目开发中经常遇到的问题和必须掌握的技术为中心,介绍了应用Java进行桌面程序开发各个方面的知识和技巧,主要包括Java语法与面向对象技术、Java高级应用、窗体与控件应用、文件操作典型应用和... -
《Java开发实战1200例(第I卷)》(李钟尉.陈丹丹).part3 高清完整PDF版
2016-06-13 16:11:24本书以开发人员在项目开发中经常遇到的问题和必须掌握的技术为中心,介绍了应用Java进行桌面程序开发各个方面的知识和技巧,主要包括Java语法与面向对象技术、Java高级应用、窗体与控件应用、文件操作典型应用和... -
Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3
2016-06-12 11:39:31本书是第II卷,以开发人员在项目开发中经常遇到的问题和必须掌握的技术为中心,介绍了应用Java进行桌面程序开发各个方面的知识和技巧,主要包括Java语法与面向对象技术、Java高级应用、窗体与控件应用、文件操作... -
Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part1
2016-06-12 11:34:39本书是第II卷,以开发人员在项目开发中经常遇到的问题和必须掌握的技术为中心,介绍了应用Java进行桌面程序开发各个方面的知识和技巧,主要包括Java语法与面向对象技术、Java高级应用、窗体与控件应用、文件操作... -
java 面试题 总结
2009-09-16 08:45:34栈是一种线形集合,其添加和删除元素的操作应在同一段完成。栈按照后进先出的方式进行处理。 堆是栈的一个组成元素 19、forward 和redirect的区别 forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL... -
C++MFC教程
2013-05-21 13:37:15每一个运行的程序都有自己的消息循环,在循环中得到属于自己的消息并根据接收窗口的句柄调用相应的窗口过程。而在没有消息时消息循环就将控制权交给系统所以Windows可以同时进行多个任务。下面的伪代码演示了消息... -
cms后台管理
2012-06-26 10:41:19final文件夹下的root文件夹更名为jeecms拷贝到tomcat 安装目录下的webapps 文件夹下(例如: D:\Tomcat 6.0\webapps\),启动tomcat,在地址栏中输入http://localhost:8080/jeecms, 您将看到第一步安装过程中的... -
12道vue高频原理面试题,你能答出几道?
2020-12-26 11:47:58并缓冲在同一事件循环中发生的所有数据变更。 如果同一个 watcher 被多次触发,只会被推入到队列中一次。这种在缓冲时去除重复数据对于避免不必要的计算和 DOM 操作是非常重要的。 然后,在下一个的事件... -
XHTML.技术内幕(高清PDF中文版)
2011-05-26 15:39:3811.2.1 在代码中确定浏览器的类型 525 11.2.2 建立自修改网页 526 11.2.3 设置页面的背景色 532 11.2.4 在运行时重装图像 532 11.2.5 打开一个新浏览器窗口 533 11.2.6 配置和写入一个新窗口 537 11.2.7 建立Alert...
-
信息安全风险评估与风险管理.ppt
-
2021年 系统分析师 系列课
-
Git&GitHub入门(MAC)
-
华为信息安全风险评估服务主打胶片.ppt
-
【硬核】一线Python程序员实战经验分享(1)
-
linux c 通过FTP 协议上传文件 源码 亲测可用
-
最小生成树——prim
-
华为1+X——网络系统建设与运维(高级)
-
数据结构学习笔记5
-
Mycat 实现 MySQL的分库分表、读写分离、主从切换
-
MaxScale 实现 MySQL 读写分离与负载均衡
-
MySQL 数据库权限管理(用户高级管理和精确访问控制)
-
SAS-Day1-简单作业
-
access应用的3个开发实例
-
在 Linux 上构建企业级 DNS 域名解析服务
-
Axure一些常用模板下载(免费模板)
-
Hi3516CV500╱Hi3516DV300 SDK 安装及升级使用说明.pdf
-
远程连接数据库失败解决方法
-
基于电商业务的全链路数据中台落地方案(全渠道、全环节、全流程)
-
Windows系统管理