如何将 int[] 包装到一个对象中并实现 equals()?

How can I wrap the int[] into an object and implement equals()?

我正在尝试查看如何测试与我的 Stack 中已有的 具有相同值 的元素是否确实在我的堆栈中。

例如

int aa[] = {5,1};
int bb[] = {3,4};
int cc[] = {3,4};

Stack stack = new Stack();

stack.push(aa);
stack.push(bb);

System.out.println(stack.contains(cc));
>>>false

如果我理解正确的话,这是 false,因为 int[] 对象是指针,并且因为它们指向两个不同的数组,所以它们被认为是不相等的。 (From this answer)

我正在尝试将 int[] 包装到一个对象中并实现 equalshashCode,正如在另一个问题的答案中所做的那样,但我得到了Cannot resolve symbol 'myArray' o.myArray.length != myArray.lengthint i = 0; i < o.myArray.length; i++。我也不明白为什么我需要/在哪里使用 hashCode()

谁能告诉我我做错了什么或者是否有更好的解决方案?

import java.util.Arrays;

public class IntArray {

    public int[] myArray;

    public IntArray () {
        myArray = new int[0];
    }

    public IntArray (int[] array) {
        myArray = array;
    }

    public int[] getArray() {
        return myArray;
    }

    public int hashCode() {
        return Arrays.hashCode(myArray);
    }

    public boolean equals(Object o) {

        if (!(o instanceof IntArray))
            return false;

        if (o.myArray.length != myArray.length)
            return false;
        else {
            for (int i = 0; i < o.myArray.length; i++) {
                if (myArray[i] != myArray[i]) {
                    return false;
                }
            }
            return true;
        }
    }
}

我将留下更好的方法这个问题并解释你被告知的内容。

oequals 方法中始终是 Object 类型。 Object class 没有 myArray 字段 - 因此出现错误。您之前使用 instanceof 检查了 oIntArray 实例,因此 o 必须至少是 IntArray 并且它定义了 myArray 字段是不够的 - 你需要显式转换它:

((IntArray)o).myArray.length;
IntArray a = (IntArray)o;
a.myArray.length;

所以基本上就这样了——你没有说清楚。我本来希望任何语法检查编辑器都能真正识别出它,所以如果合适的话,考虑使用无数可用的编辑器中的任何一个来避免此类错误。