精华内容
下载资源
问答
  • 删除 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().

    展开全文
  • 我是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
    **

    展开全文
  • QMapfor循环中使用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时,遇到与上面相同的问题。

    
    

    展开全文
  • QMaperase后,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等等都要注意这个问题;

    展开全文
  • forEach(): 按索引值升序顺序,遍历每一项 .不直接改变原数组,但如果其callback操作数组(回调的第...遍历时新添加的项不会被遍历到,若原有项发生改变,便利的是遍历它时当下的值,若被删除则不会被遍历...
  • 使用C++unordered_map类型时,我们经常要根据关键字查找,并移除一组映射,Java直接用remove即可,而STL居然没有实现remove这个函数,还要自己写循环来查找要删除项,然后用erase来清除,我也是醉了,参见...
  • -- 微信小程序,将一个参数设置空字符串,结果会变成字符串"true" --> <view class="u-form-item--left" :style="{ width: uLabelWidth, flex: `0 0 ${...
  • 对象中的信息以及可对对象执行操作(类方法)。对象某些组成部分对于外界来说是可见(公有部 分),而某些部分却是隐藏(私有部分)。特殊类方法(构造函数和析构函数)对象创建和释放时发挥作 用。本...
  • 对象中的信息以及可对对象执行操作(类方法)。对象某些组成部分对于外界来说是可见(公有部 分),而某些部分却是隐藏(私有部分)。特殊类方法(构造函数和析构函数)对象创建和释放时发挥作 用。本...
  • 对象中的信息以及可对对象执行操作(类方法)。对象某些组成部分对于外界来说是可见(公有部 分),而某些部分却是隐藏(私有部分)。特殊类方法(构造函数和析构函数)对象创建和释放时发挥作 用。本...
  •  栈是一种线形集合,其添加和删除元素操作应同一段完成。栈按照后进先出方式进行处理。 堆是栈一个组成元素 22、forward 和redirect区别  forward是服务器请求资源,服务器直接访问目标地址URL,把...
  • 2.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中的基本数据类型和...
  • 2.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中的基本数据类型和...
  • 2.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完全自学一本通》面向MATLAB 初中级读者,介绍MATLAB R2014a 集成环境基础上,对MATLAB 使用常用知识和工具进行了详细介绍,书各章均提供了大量有针对性算例,供读者实战练习。...
  • 13.3 小波分析图像处理中的应用 13.3.1 基于小波变换图像局部压缩 13.3.2 二维小波变换图像压缩 13.3.3 图像压缩阈值确定与作用命令 13.3.4 基于小波包变换图像压缩 13.3.5 小波变换用于图像...
  • winceGPS模拟器

    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进行桌面程序开发各个方面知识和技巧,主要包括Java语法与面向对象技术、Java高级应用、窗体与控件应用、文件操作典型应用和...
  • 本书以开发人员项目开发经常遇到问题和必须掌握技术为中心,介绍了应用Java进行桌面程序开发各个方面知识和技巧,主要包括Java语法与面向对象技术、Java高级应用、窗体与控件应用、文件操作典型应用和...
  • 本书是第II卷,以开发人员项目开发经常遇到问题和必须掌握技术为中心,介绍了应用Java进行桌面程序开发各个方面知识和技巧,主要包括Java语法与面向对象技术、Java高级应用、窗体与控件应用、文件操作...
  • 本书是第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:19
    final文件夹下root文件夹更名为jeecms拷贝到tomcat 安装目录下webapps 文件夹下(例如: D:\Tomcat 6.0\webapps\),启动tomcat,地址栏输入http://localhost:8080/jeecms, 您将看到第一步安装过程中的...
  • 并缓冲同一事件循环中发生所有数据变更。 如果同一个 watcher 被多次触发,只会被推入到队列中一次。这种缓冲时去除重复数据对于避免不必要计算和 DOM 操作是非常重要。 然后,在下一个事件...
  • 11.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...

空空如也

空空如也

1 2 3
收藏数 41
精华内容 16
关键字:

在循环中删除map的项