有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在java中比较堆栈元素和对象的搜索

我在处理我编写的这个“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;
}

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


共 (1) 个答案

  1. # 1 楼答案

    对象类的默认相等行为基于引用比较相等。您需要在船类中重写equals。使用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. ^{}
    2. ^{}