比较原始对象与Stack / Queue - 重写equals()方法

时间:2015-03-09 05:13:21

标签: java data-structures stack queue

我已经创建了一个可以继承以使用LinkedLists创建堆栈和队列的类,我已经通过了所有JUnit测试,除了等于一个,我仍然不知道它为什么没有#&# 39;工作。

@Override public boolean equals(Object o) {

    if( o == null) return false;
    if(o == this) return true;


    if(!(o instanceof PushPop)) return false;
    PushPop test1= this;
    PushPop test = (PushPop)o;
    while(!test.isEmpty() && !test1.isEmpty()){
        if(test1.pop() != test.pop()) return false;
    }
    return true;
}

测试在比较值时发出断言错误,特别是当堆栈/队列的额外值超过第二个值时。

1 个答案:

答案 0 :(得分:0)

好的,我找到了你的问题:

在您的测试中,您执行以下[取自评论]

stack.push(i);
Assert.assertFalse(stack.equals(stack2));
stack2.push(i);
Assert.assertTrue(stack.equals(stack2));

这似乎是合理的。但是,equals会清除这两个堆栈,因此当您push i转到stack2时,它不再等于现在为空的stack

因此你的错误。

解决方案:不要在equals方法中修改对象。

我建议克隆或比较您的基础数据结构(例如,如果您使用的是节点,Node实施equals)。

相关问题