gpt4 book ai didi

java - 堆栈变量和 .contains(Object o)

转载 作者:行者123 更新时间:2023-12-01 12:24:37 26 4
gpt4 key购买 nike

我无法跟踪堆栈中的节点。我的节点包含一个 2d int 数组,其中包含数字 0-20 以及另一个整数,用于测量达到当前节点状态的成本(2d int 数组)。

目前我无法弄清楚如何跟踪我的堆栈是否包含我希望跳过的节点,因为它已经在堆栈中或之前已弹出,因此我避免在具有完全相同状态的节点上重复相同的比较+成本。

如果 q 是我的堆栈,n1 是我刚刚弹出的当前节点,为什么不会

q.contains(n1);

是否返回 true?

我还尝试制作一个 ArrayList,为每个节点创建一个字符串

例如

1 2 4
5 3 6
0 7 8

创建字符串“1,2,4,5,3,6,0,7,8,”。如果我将此字符串添加到数组列表中并使用aList.contains(stringKey);永远不会返回 true?

我认为我必须对一个对象做一些事情,因为 contains() 需要传递一个对象,但我不 100% 确定如何做到这一点。

最佳答案

如果在列表中找到 obj,任何列表的 contains(obj) 都会返回 true。它使用您通过 equals() 方法提供的 obj 来检查列表中的每个 object。因此,您需要重写您正在使用的对象的 equals() 方法。

示例:

class MyObj {
int a;
char b;

MyObj(int a, char b) {
this.a = a; this.b = b;
}

@Override
public boolean equals(Object obj) {
if(obj instanceof MyObj){
MyObj myobj = (MyObj) obj;
if(myobj.a == a && myobj.b == b){
return true;
}
}
return false;
}
}

现在它可以在任何List中使用,如下所示:

ArrayList<MyObj> list = new ArrayList<>();
MyObj obj = new MyObj(3, 'b');
list.add(obj);
System.out.println(list.contains(obj));
System.out.println(list.contains(new MyObj(3, 'b')));

输出:

true
true

根据良好的设计模式,当我们决定重写equals()时,我们也应该重写hashCode()

关于java - 堆栈变量和 .contains(Object o),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26456230/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com