这听起来可能是一个非常模糊的问题,但事实并非如此.我在维基上经历过Hash函数描述,但理解它并不是很有帮助.
我正在寻找像Hashing这样相当复杂的主题的简单答案.这是我的问题:
HashMap,HashTable和HashList?Hash和LinkedList询问,有没有从测试受访者的知识,为任何特定的逻辑?我知道我的问题清单很大但我真的很感激,如果我能够对这些问题得到一些明确的答案,因为我真的想了解这个主题.
我正在尝试理解该hashCode()方法的本机实现.这种方法到底是什么回归?它是一个内存地址还是一个随机值?
在Javadoc for Object.hashCode()中声明
尽管合理实用,但是由class定义的hashCode方法
Object确实为不同的对象返回了不同的整数.(这通常通过将对象的内部地址转换为整数来实现,但Java™编程语言不需要此实现技术.)
这是一个常见的miconception,这与内存地址有关,但它并没有因为它可以在没有通知的情况下改变,而hashCode()不会,也不能改变对象.
@Neet提供了一个很好的答案的链接/sf/answers/39579151/但我正在寻找更多细节.
这是一个例子来说明我的担忧
Field theUnsafe = Unsafe.class.getDeclaredField("theUnsafe");
theUnsafe.setAccessible(true);
Unsafe unsafe = (Unsafe) theUnsafe.get(null);
for (int t = 0; t < 10; t++) {
System.gc();
Object[] objects = new Object[10];
for (int i = 0; i < objects.length; i++)
objects[i] = new Object();
for (int i = 0; i < objects.length; i++) {
if (i > 0) System.out.print(", ");
int location = unsafe.getInt(objects, Unsafe.ARRAY_OBJECT_BASE_OFFSET + Unsafe.ARRAY_OBJECT_INDEX_SCALE * i);
System.out.printf("%08x: hc= …Run Code Online (Sandbox Code Playgroud) 我很好奇为什么要Object.toString()回报这个:
return getClass().getName() + "@" + Integer.toHexString(hashCode());
Run Code Online (Sandbox Code Playgroud)
与此相反:
return getClass().getName() + "@" + hashCode();
Run Code Online (Sandbox Code Playgroud)
将哈希码显示为十六进制而不是十进制有什么好处?
可能重复:
什么是对象哈希码
假设我创建了一个对象,该对象Employee具有id,firstName,lastName和电子邮件,用于实例变量和相应的setter/getter方法.hashCode()如果hashCode()在Employee对象存储在集合对象中时不覆盖对象,如何计算?
我在书中发现了这句话:
如果两个对象的哈希码是等于的,那么这可能并不意味着对象是等于的.
有人可以解释一下这句话吗?