如何嵌套循环判断secondNodeArray节点是否在queueNode或FirstNodeArray中?
检查节点是否存在于多个集合中的实现方案
嘿,我来帮你搞定这个问题!你已经有了遍历secondNodeArray的外层循环,接下来判断节点是否存在于另外两个集合里其实有两种常用方式,我给你详细拆解:
方式一:直接用集合内置的contains()方法(简单高效)
这是最省心的实现,Java的ArrayList和大部分Queue实现(比如LinkedList)都继承了Collection接口,自带contains()方法可以直接判断元素是否存在。不过要注意必须给你的Node类正确重写equals()和hashCode()方法,不然默认会比较对象引用地址,可能判断不准。
代码示例:
// 注意ArrayList用size()获取长度,不是length()哦 for(int i = 0; i < secondNodeArray.size(); i++) { Node currentNode = secondNodeArray.get(i); // 分别检查两个集合 boolean existsInFirst = FirstNodeArray.contains(currentNode); boolean existsInQueue = queueNode.contains(currentNode); if(existsInFirst || existsInQueue) { // 这里写节点存在时的业务逻辑 System.out.println("节点" + currentNode + "存在于目标集合中"); } else { // 节点不存在时的逻辑 } }
方式二:手动嵌套循环(适合学习底层逻辑)
如果你想手动实现判断逻辑(比如用来理解遍历原理),可以这样写:
for(int i = 0; i < secondNodeArray.size(); i++) { Node currentNode = secondNodeArray.get(i); boolean isNodeFound = false; // 先嵌套循环检查FirstNodeArray for(int j = 0; j < FirstNodeArray.size(); j++) { // 同样要依赖正确重写的equals()方法 if(currentNode.equals(FirstNodeArray.get(j))) { isNodeFound = true; break; // 找到就跳出内层循环,不用继续遍历 } } // 如果First里没找到,再遍历Queue检查 if(!isNodeFound) { Iterator<Node> queueIterator = queueNode.iterator(); while(queueIterator.hasNext()) { Node queueItem = queueIterator.next(); if(currentNode.equals(queueItem)) { isNodeFound = true; break; } } } // 根据结果处理逻辑 if(isNodeFound) { // 节点存在的处理 } else { // 节点不存在的处理 } }
进阶优化:用HashSet提升性能
如果你的集合元素很多,频繁做这种检查建议先把FirstNodeArray和queueNode转成HashSet——因为HashSet的contains()方法是O(1)时间复杂度,比ArrayList的O(n)快很多:
// 预先转换一次即可,不用每次循环都处理 Set<Node> firstNodeSet = new HashSet<>(FirstNodeArray); Set<Node> queueNodeSet = new HashSet<>(queueNode); for(int i = 0; i < secondNodeArray.size(); i++) { Node currentNode = secondNodeArray.get(i); if(firstNodeSet.contains(currentNode) || queueNodeSet.contains(currentNode)) { // 处理逻辑 } }
内容的提问来源于stack exchange,提问作者user11029801
相关产品推荐
相关产品推荐

