gpt4 book ai didi

java - 存储桶是单个内存位置还是类似于内存位置数组?

转载 作者:行者123 更新时间:2023-12-02 03:11:44 25 4
gpt4 key购买 nike

当我们说,对于具有相同哈希码的两个不相等的对象,这些对象存储在同一个存储桶中时,这实际上意味着什么?

最佳答案

2 unequal objects having same hash code, the objects are stored in same bucket, what does it imply practically ?

我将通过下面的 Product 类示例向您解释这个概念:

产品类别:

public class Product {

private int id;

public Product(int id) {
this.id = id;
}

//add getters and settes for id

public boolean equals(Object obj) {
Product product = (Product)obj;
if(id == product.getId()) {
return true;
}
return false;
}

public int hashcode() {
return 1;
}
}

测试类:

public class Test {

public static void main(String[] args) {
Set<Product> set = new HashSet<>();
Product p1 = new Product(1);
Product p2 = new Product(2);
set.add(p1);
set.add(p2);
}
}

假设您已为 Product 类创建了两个对象 p1p2 并将其添加到 HashSet 中,如图所示如上所述。

根据 Product 类的约定,p1p2 对象不相等,因为它们的产品 ID 不同。在 HashSet 内,这些 p1p2 对象根据 hashcode< 存储到不同的存储桶(简单地放置不同的内存位置)中Product 对象返回。因为您的 p1p2 对象都返回相同的哈希码(来自 Product 类的 hashcode() 方法),它们都将被保存到同一个存储桶(内存位置)中。同样,您的所有 product 对象(即使 product 对象不相等)都将被推送到同一个存储桶,因为它们的哈希码相同。

因此,当您尝试使用 set.contains()HashSet 中搜索 product 对象时,该对象必须是扫描并从整个产品中找到(假设您存储了 10000 个对象)。

但是当您正确实现 hashcode() 时,即为不相等的 Product 对象返回不同的哈希码,则 product 对象将分布在不同的存储桶中并且检索变得更快(无需扫描所有对象),即,它显着提高了性能。

同样的概念适用于 Java 中所有与 Hash* 相关的集合 API(HashMap、HashSet 等) 方法。

Is bucket a single memory location or similar to an array of memory locations ?

一个Bucket存储多个对象引用,每个Hash Bucket内部使用LinkedListTreeMap等数据结构来定位存储的对象。

您可以在此处查看有关同一主题的更多详细信息。

关于java - 存储桶是单个内存位置还是类似于内存位置数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40950199/

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