【问题标题】:Comparing a stack element with an object in java将堆栈元素与java中的对象进行比较
【发布时间】:2012-10-17 14:21:20
【问题描述】:

我在处理我编写的这个“search()”函数时遇到了一些麻烦。好吧,我需要检查我的堆栈中是否已经存在一个对象。我的对象如下所示:

 Boat [mLeft=[0, 0, 0], boat=L, mRight=[0, C, V]]

我的堆栈是这样的:

  Boat [mLeft=[0, 0, 0], boat=L, mRight=[0, C, V]]
  Boat [mLeft=[0, 0, 0], boat=C, mRight=[L, 0, V]]
  Boat [mLeft=[0, 0, 0], boat=V, mRight=[L, C, 0]]
  Boat [mLeft=[0, 0, 0], boat=0, mRight=[L, C, V]]

这是我的“搜索”功能:

  public boolean search(Boat b){
    boolean r=false;
    for(int i=0;i<btStack.size();i++)
    {
        if(btStack.elementAt(i).equals(b))
        {
            r = true;               
        }
    }
    return r;
}

这从来都不是真的……我也不知道为什么。你能帮忙吗?谢谢

【问题讨论】:

  • if(btStack.elementAt(i).equals(b)) { return true;找到元素后,没有理由进一步循环。

标签: java search object stack compare


【解决方案1】:

对象类的默认等于行为基于引用比较相等性。您需要在 Boat 类中覆盖 equals。使用等于你还应该覆盖hashcode

@Override
public boolean equals(Object obj) {
    if (obj == null)
        return false;
    if (!(obj instanceof Boat))
        return false;

    Boat b = (Boat)obj;
    return  b.someproperty==this.someproperty;//Assuming someproperty is primitive
}

参考资料:

  1. Equals and Hash Code
  2. Overriding equals and hashCode in Java

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-19
    • 2015-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-20
    相关资源
    最近更新 更多