Java 优先级队列中的并发修改异常

标签 java iterator priority-queue concurrentmodification

我在迭代优先级队列时遇到问题,导致出现 ConcurrentmodificationException。

迭代代码:

Queue<Patient> pq = new PriorityQueue<Patient>();
 Iterator<Patient> it = pq.iterator();    
            while(iter.hasNext()){
                Patient current = iter.next();
                if(current.getName().equals(patientName)){

                    pq.remove(p);
                    }


                } 

有错误表明 iter.next() 会导致并发修改异常。 我可以知道如何解决这个问题吗?我已经在互联网上搜索过,但仍然找不到解决方案。

最佳答案

将您的代码更改为以下代码来解决它 -

Queue<Patient> pq = new PriorityQueue<Patient>();
 Iterator<Patient> iter = pq.iterator();    
            while(iter.hasNext()){
                Patient current = iter.next();
                if(current.getName().equals(patientName)){

                    iter.remove();
                    }


                } 

解释 ConcurrentModificationException 会从迭代器的 next() 方法抛出,如果底层集合(在您的情况下是队列)中有任何结构更改,即添加了任何元素或者直接从队列中删除。它被称为快速失败迭代器

关于Java 优先级队列中的并发修改异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41958628/

相关文章:

java - 如何将数组排序为列

c++ - 对 std::max_element 施加条件

c++ - 在 C++ 中为迭代器编写运算符 == 函数

Java快速找到距离给定二维点最近的k个点

java - 优先队列 Java 添加方法抛出语法错误和错位构造错误

python - PriorityQueue 很慢

java - Elastic Beanstalk (AWS) 的 Hibernate 配置

java - 调试时无法实例化 Activity 问题

java - 在这种情况下,ArrayList 是否会导致竞争条件或死锁?

python - 如何在迭代器处返回 "peek",同时保留项目?