gpt4 book ai didi

java - 如何确保哈希码不会偶然等于另一个相同类型的对象

转载 作者:行者123 更新时间:2023-12-02 06:23:45 25 4
gpt4 key购买 nike

我正在尝试使用复制构造函数来克隆车辆对象。我只是为了演示而重写了名为 Vehicle 的类的 toString() 方法。但克隆必须是独一无二的并且完全独立。

是否可以保证,如果我创建了数千个 Vehicle 对象的克隆,那么在使用 equals() 方法相互检查时,所有这些克隆都是唯一的?我的印象是,创建的每个对象都保证始终有一个新的、唯一的哈希码,当我使用 equals() 方法进行比较时,该哈希码永远不会等于另一个。

编辑:我的问题确实是,使用默认的 equals() 方法来比较我的 100000 个克隆是否可以确保每个克隆实际上都是唯一的,并且 equals() 将始终返回 false???

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 方法始终能够以 100% 的准确度区分相等(无论其含义是什么)和不等于。如果哈希码不匹配,则比较哈希码只能保证“不相等”——相等的哈希码并不意味着“相等”为真。

哈希码的一个牢不可破的规则是,如果两个对象返回 true 表示“相等”,那么它们的哈希码必须匹配。

关于java - 如何确保哈希码不会偶然等于另一个相同类型的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20778012/

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