相关疑难解决方法(0)

哈希:内部如何运作?

这听起来可能是一个非常模糊的问题,但事实并非如此.我在维基上经历过Hash函数描述,但理解它并不是很有帮助.

我正在寻找像Hashing这样相当复杂的主题的简单答案.这是我的问题:

  1. 哈希是什么意思?它在内部如何运作?
  2. 它遵循什么算法?
  3. 有什么区别HashMap,HashTableHashList
  4. "恒定时间复杂度"是什么意思?为什么哈希的不同实现会给出恒定的时间操作?
  5. 最后,为什么大多数的面试问题HashLinkedList询问,有没有从测试受访者的知识,为任何特定的逻辑?

我知道我的问题清单很大但我真的很感激,如果我能够对这些问题得到一些明确的答案,因为我真的想了解这个主题.

java algorithm hash data-structures

50
推荐指数
4
解决办法
7万
查看次数

Java Object.hashCode() - 地址还是随机()?

我正在尝试理解该hashCode()方法的本机实现.这种方法到底是什么回归?它是一个内存地址还是一个随机值?

java

24
推荐指数
2
解决办法
3094
查看次数

什么是Java中的"内部地址"?

在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)

java memory unsafe hashcode low-level

23
推荐指数
2
解决办法
2355
查看次数

为什么默认的Object.toString()返回hashCode的十六进制表示?

我很好奇为什么要Object.toString()回报这个:

return getClass().getName() + "@" + Integer.toHexString(hashCode());
Run Code Online (Sandbox Code Playgroud)

与此相反:

return getClass().getName() + "@" + hashCode();
Run Code Online (Sandbox Code Playgroud)

将哈希码显示为十六进制而不是十进制有什么好处?

java hash tostring hashcode

10
推荐指数
2
解决办法
7522
查看次数

java - 如果hashCode没有被覆盖会怎么样?

可能重复:
什么是对象哈希码

假设我创建了一个对象,该对象Employee具有id,firstName,lastName和电子邮件,用于实例变量和相应的setter/getter方法.hashCode()如果hashCode()Employee对象存储在集合对象中时不覆盖对象,如何计算?

java hashcode

4
推荐指数
2
解决办法
3万
查看次数

为什么具有相同哈希码的对象不相等

我在书中发现了这句话:

如果两个对象的哈希码是等于的,那么这可能并不意味着对象是等于的.

有人可以解释一下这句话吗?

java

0
推荐指数
3
解决办法
198
查看次数