You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中如何判断两个ArrayDeque是否相等?

ArrayDeque内容相等判断及代码优化

关于equals()方法的说明

ArrayDeque没有重写equals()和hashCode()方法,它使用Object类的默认实现——仅比较对象的内存地址,所以无法用来判断两个ArrayDeque的元素是否完全相等。而Stack类继承自Vector,Vector重写了equals方法,会逐个比较元素内容,因此可以直接用equals()判断内容相等。

你的代码优化方案

你当前的代码会移除原队列中的所有元素,这在LeetCode题目这类场景中不可取(后续可能还需要使用原队列),以下是几种优化方案:

方案1:迭代器遍历比较

利用ArrayDeque的迭代器逐个对比元素,完全不修改原队列:

import java.util.Objects;
import java.util.Iterator;
import java.util.ArrayDeque;

public boolean isEqual(ArrayDeque<Character> sQueue, ArrayDeque<Character> tQueue) {
    if (sQueue.size() != tQueue.size()) {
        return false;
    }
    Iterator<Character> sIter = sQueue.iterator();
    Iterator<Character> tIter = tQueue.iterator();
    while (sIter.hasNext()) {
        // 用Objects.equals避免空指针,同时正确比较Character包装类
        if (!Objects.equals(sIter.next(), tIter.next())) {
            return false;
        }
    }
    return true;
}

方案2:复制队列副本操作

如果习惯用removeLast的逻辑,可以复制原队列的副本,操作副本不影响原队列:

import java.util.Objects;
import java.util.ArrayDeque;

public boolean isEqual(ArrayDeque<Character> sQueue, ArrayDeque<Character> tQueue) {
    if (sQueue.size() != tQueue.size()) {
        return false;
    }
    // 复制原队列到新实例
    ArrayDeque<Character> sCopy = new ArrayDeque<>(sQueue);
    ArrayDeque<Character> tCopy = new ArrayDeque<>(tQueue);
    while (!sCopy.isEmpty()) {
        if (!Objects.equals(sCopy.removeLast(), tCopy.removeLast())) {
            return false;
        }
    }
    return true;
}

方案3:转数组后比较

将ArrayDeque转为数组,利用Arrays.equals()直接对比:

import java.util.Arrays;
import java.util.ArrayDeque;

public boolean isEqual(ArrayDeque<Character> sQueue, ArrayDeque<Character> tQueue) {
    if (sQueue.size() != tQueue.size()) {
        return false;
    }
    return Arrays.equals(sQueue.toArray(), tQueue.toArray());
}

针对LeetCode《Backspace String Compare》的提示

在这道题中,你可以先分别处理两个字符串得到对应的ArrayDeque,再用上述任意一种方法比较队列内容即可,无需修改原队列元素。

内容的提问来源于stack exchange,提问作者mattsmith5

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 11:08:15