在Java中堆栈,问题与"包含"

Mar*_*nas 3 java stack contains

我在我的程序中使用堆栈,但是当程序试图检查堆栈中包含哪些元素时,我遇到了问题.我在Stack中使用整数数组.简短的例子是:

        Stack<int[]> myStack = new Stack<int[]>();
        myStack.push(new int[]{1,2});
        myStack.push(new int[]{1,3});
        myStack.push(new int[]{1,4});
        if (myStack.contains(new int[]{1,3})) {
            System.out.println("YES");
        } else {
            System.out.println("NO");
        }
Run Code Online (Sandbox Code Playgroud)

现在它被打印为"NO".我怎么能得到"是"?我知道问题是我没有使用相同的对象,但在现实中我的程序要大得多,我不能用它

int[] myInteger = new int[]{1,3};
myStack.push(myInteger);
myStack.contains(myInteger);
Run Code Online (Sandbox Code Playgroud)

maa*_*nus 6

这很简单:int[]通过身份进行比较,

new int[]{1,3}.equals(new int[]{1,3})
Run Code Online (Sandbox Code Playgroud)

返回false.有很多解决方案:

  • List<Integer>改用.这是非常低效的,但可能就足够了.
  • 将其包装int[]到一个对象中并实现equalshashCode.
  • 使用像trove4j这样的原始集合库,提供类似的东西 List<int>