Я пытаюсь сохранить набор возможных вариантов и исключить дубликаты, поэтому я храню выбор, который я сделал в HashSet
. У меня есть две части данных для каждого шага, и их комбинация не должна быть уникальной для того, чтобы она считалась дубликатом (например, [2,0], [0,2], [2,2] все были бы новыми но затем переход к [2,2] будет дублировать).Переопределение равных без пользовательского класса
Я считаю, что нужно переопределить equals
для того, чтобы правильно определить, если шаг уже в HashSet
, но я не использую пользовательский класс, только массив Integers
, так что большинство из того, что я нашел не применимо (насколько мне известно). This seems like it may be useful, предлагая возможность подкласса 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
}
}
}
}
Похоже, что использование [Point] (http://docs.oracle.com/javase/7/docs/api/java/awt/Point.html) может удовлетворить ваши потребности. – Dukeling
Не понимаю.Почему вы не можете просто создать новый класс с парой 'int'? –
Я не знал, что существует, но в этом случае да, я могу пойти с этим. Благодарю. Тем не менее, мне все еще хотелось бы ответить на этот вопрос – Daniel