我已经坚持了一段时间了,实际上我有两个对象,根据我的相同,我已经覆盖了hashCode方法来为两者创建相同的哈希码,当我使用"=="比较它们是否相等时对象的等于(它也使用"=="),它向我返回false,下面的场景应该完全解释:::
1)HashCode-->-626561382 AND 2)HashCode--->-626561382
1)IdentityHashCode-->19640463
2)IdentityHashCode-->22330755
1)Bean1=beans.OrdersBean@daa76e9a AND 2)Bean2=beans.OrdersBean@daa76e9a
Check MySelf for(==)-->false
Check Object's Equals()-->false
Run Code Online (Sandbox Code Playgroud)
请你解释一下为什么会这样?????
我已经看到很多关于不用Java覆盖hashCode的问题而且我得到了它,但是在这种稍微不同的情况下会发生什么:
hashCode = 1且equals未被覆盖.
似乎没有违反HashCode合约 - 我们为相同的对象返回相同的hashCode.但是这种实现允许添加重复键并为逻辑上相等的键重新调整null.另一方面,当:
hashCode = 1和@Override equals()
它工作得很好.我很难弄清楚这两种情况下发生了什么.
我是 Java 新手。有人可以向我解释一下这里使用 lambda 和方法有什么区别吗?
方法等于()
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (!(o instanceof Book)) {
return false;
}
Book book = (Book) o;
if (!author.equals(book.author)) {
return false;
}
return title.equals(book.title);
}
Run Code Online (Sandbox Code Playgroud)
拉姆达等于()
public Function<Object, Boolean> equals = (Object o) -> {
if (this == o) {
return true;
}
if (!(o instanceof Book)) {
return false;
}
Book book = (Book) o;
if (!author.equals(book.author)) {
return false;
}
return …Run Code Online (Sandbox Code Playgroud) 到目前为止我收集到的信息是,哈希码是整数,有助于更快地从数组中查找数据。看这段代码:
string x = "Run the program to find this string's hash code!";
int hashCode = x.GetHashCode();
Random random = new Random(hashCode);
for(int i = 0; i<100; i++)
{
// Always generates the same set of random integers 60, 23, 67, 80, 89, 44, 44 and so on...
int randomNumber = random.Next(0, 100);
Console.WriteLine("Hash Code is: {0}", hashCode);
Console.WriteLine("The random number it generates is: {0}", randomNumber);
Console.ReadKey();
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我使用字符串的哈希码x作为随机数生成器的种子。这段代码给了我 100 个随机整数,但每次运行该程序时,它都会给我相同的随机数集!我的问题是:为什么每次循环迭代时它都会给我一个不同的随机数?为什么 x 的哈希码不断变化,即使字符串没有改变。哈希码到底是什么以及它们是如何生成的(如果需要)?