我正在尝试存储一组可能的选择并消除重复项,因此我将我所做的选择存储在HashSet
. 我的每一步都有两条数据,两者的组合不能唯一,这样才能被认为是重复的(例如 [2,0]、[0,2]、[2,2] 都是新的步骤,但随后转到 [2,2] 将是重复的)。
我相信我需要重写equals
以正确确定步骤是否已经在HashSet
但我没有使用自定义类,只是一个数组Integers
,所以我发现的大部分内容都不适用(据我所知)。这似乎很有用,暗示了子类化的可能性,HashSet
但如果可能的话,我想避免这种情况。我希望equals
我注释掉的方法会起作用,但它从未被调用过。我也需要覆盖hashCode()
吗?我知道他们齐头并进。我只需要编写自己的课程还是有另一种方法可以做我想做的事?
import java.util.HashSet;
public class EP2 {
public static long count = 0;
public static HashSet<Integer []> visits = new HashSet<Integer []>();
//@Override
//public boolean equals(Object j){
// return true;
//}
public static void main(String[] args) {
int position = 0;
int depth = 0;
walk(position, depth);
System.out.println(count);
}
public static void walk(int position, int depth){
count++;
Integer[] specs = new Integer[2];
specs[0] = position;
specs[1] = depth;
visits.add(specs);
Integer[] specL = new Integer[]{position - 1, depth+1};
Integer[] specR = new Integer[]{position + 1, depth+1};
//doesn't avoid [0,2] duplicates
if(depth < 2){
if(!visits.contains(specL)){
walk(position - 1, depth+1); //walk left
}
if(!visits.contains(specR)){
walk(position + 1, depth+1); //walk right
}
}
}
}