Java中如何移除队列中所有x、y属性相同的指定元素?
移除队列中所有x=1且y=2的Element对象
首先得明确:你用的是LinkedList实现的Queue,而LinkedList本身属于Collection体系,所以有几种靠谱的方式处理这个需求——千万注意别在普通遍历里直接调用remove(),不然大概率会触发ConcurrentModificationException。下面给你两种实用方案:
方案一:用迭代器(Iterator)安全遍历移除
这是最传统也最稳妥的方式,适配所有Java版本:
Iterator<Element> iterator = q.iterator(); while (iterator.hasNext()) { Element elem = iterator.next(); if (elem.x == 1 && elem.y == 2) { // 必须用迭代器自身的remove方法,避免并发修改异常 iterator.remove(); } }
这种方式的好处是逻辑清晰,还能在删除前后灵活加日志、额外判断之类的扩展操作,完全不会触发遍历修改冲突。
方案二:Java 8+用removeIf()一行搞定
如果你的项目用的是Java 8及以上版本,Collection接口提供的removeIf()默认方法能帮你简化代码:
q.removeIf(elem -> elem.x == 1 && elem.y == 2);
这个方法内部其实也是基于迭代器实现的,同样安全,而且代码简洁到一眼就能看懂,可读性拉满。
额外补充:移除后加入更优对象
既然你已经找到了x=1、y=2且moves更优的Element对象,等移除完所有旧的同坐标元素后,直接调用q.add(yourBetterElement)或者q.offer(yourBetterElement)把新对象塞进队列就行。
最后提个小注意点:如果是多线程环境下用这个队列,那要么给操作加锁,要么换成线程安全的队列(比如ConcurrentLinkedQueue),不然会有线程安全隐患。
内容的提问来源于stack exchange,提问作者Epitheoritis 32
相关产品推荐
相关产品推荐

