Я экспериментирую с конструктором копирования для клонирования объектов транспортного средства. Я переопределяю метод toString()
класса под названием Vehicle только ради презентации. Но клоны должны быть уникальными и полностью независимыми.Как обеспечить, чтобы хэш-код не равнялся другому объекту того же типа случайно
Является ли это гарантией того, что если я создам тысячи клонов объекта Vehicle, то все они будут уникальными при проверке друг на друга с использованием метода equals()
? У меня создается впечатление, что каждый созданный объект гарантированно всегда имеет новый и уникальный хэш-код, который никогда не сравнялся бы с другим, когда я использую метод equals()
для сравнения.
Редакция: Моего вопроса на самом деле, был бы с помощью равных по умолчанию() метод, чтобы сравнить мои клоны 100000 убедиться, что каждый из них в самом деле, уникальных и равно() всегда будет возвращать ложь ???
public class App {
public List<Vehicle> buildCar(String type, int hp)
{
List<Vehicle> vs = new ArrayList<Vehicle>();
Vehicle vObject = new Vehicle();
vObject.setHorsePower(hp);
vObject.setType(type);
Vehicle newV = new Vehicle(vObject);
vs.add(newV);
vs.add(vObject);
return vs;
}
public static void main(String args[]){
App ap = new App();
List<Vehicle> vehicles = new ArrayList<Vehicle>();
vehicles.addAll(ap.buildCar("car",100));
Vehicle v1 = vehicles.get(0);
Vehicle v2 = vehicles.get(1);
System.out.println(v1.equals(v2)); // prints false.
//System.out.println(v2.hashCode());
}
}
Хэш-код не должен быть уникальным, только «Насколько это практически целесообразно». –
Значит, метод equals() по умолчанию использует hashcode для проверки равенства? Как я могу обеспечить, чтобы клоны были индивидуальными в моих проверках кода Java, используя такие методы, как equals()? –
Прочитайте javadoc каждого метода. Ваш 'equals()' ('Указывает, является ли какой-либо другой объект равным« this one.') не должен использовать 'hashcode()' ('Возвращает значение хэш-кода для объекта. ') Внутри. –