当前位置: 首页 > 知识库问答 >
问题:

哈希映射最初是否与轮询或喜欢的列表一起放置/获取?

闾丘正志
2023-03-14

我正在使用hashmap制作一个图形函数来存储所有节点。我知道散列是如何工作的,但对于散列映射,我不知道它们是否使用lin/quad探测来放置/获取节点,或者它是否是一个链表。我希望它使用轮询,因为我只希望每个散列有一个节点,而不是链表格式(或任何其他将多个节点散列到同一位置的格式)。这是正常的操作方式,还是需要设置一些值才能将链表方法更改为lin/quad探测方法。

我基本上想知道我的一个节点是否映射到了与前一个节点相同的位置,

>

  • 它是否会用新节点替换旧节点(映射的删除方法),如果不替换,则。。。

    它只是将其附加到内存中包含两个节点的链接列表的末尾,还是。。。

    它会使用某种类型的轮询方法来获取地图中不包含新节点的新位置吗

    我只希望在地图中的每个可用位置都有一个节点

  • 共有1个答案

    程和煦
    2023-03-14

    我指的是Java 8(具体来说是1.8.0_66-b18)中的HashMap的实现。

    HashMap维护Nodes的表。

    当您为一个键输入一个值时,该键将被散列,并使用table映射到bucket(表中的一个节点)。长度-1

    如果此索引中没有节点,将创建一个新节点。

    如果此索引处有一个节点,则该值将被替换(如果我们有相同的键)或附加一个新节点。桶被组织为节点结构。首先,它类似于链表,但如果节点的数量大于某个阈值,它将被“树化”,即转换为树状结构。

    要回答您的问题:

    1. 不,它不会用新节点替换旧节点。如果这个键已经有一个节点,它的值将被替换。
    2. 是的,一个新节点将附加到节点结构(链表状或树状)。链表状结构可能因此转换为树状结构。
    3. 不。将哈希映射到表的索引是硬编码的。

    我基本上想知道我的一个节点是否映射到地图中与前一个节点相同的位置

    如果不深入研究HashMap(私有)的内部,您就无法确定这一点。微创可能是找出HashMap的表的容量/长度,以及每个键的哈希值的计算索引。但即使是容量()也无法访问。所以这是一个很好的迹象,表明它是一个实现细节,您不应该真的这样做。

    您也很难影响每个桶是否只获得一个节点或更多。这甚至不是哈希冲突,而是HashMap为哈希计算的索引的冲突。您不会遇到这种冲突的唯一方法是:

    • 条目数小于容量并且
    • 所有键的散列给出不同的table.length-1

    这很难保证。

     类似资料:
    • 有人能帮我找到一份没有重复的正确清单吗。 我有一个哈希映射列表,比如“HashMap map”,它的大小是4。键值对类似于以下内容 我想创建另一个Hashmap列表,其中包含“uri\u path”的单个条目以及相应计算的平均值和计数。这就是我正在尝试的。理想情况下,新列表的大小应小于原始列表的大小。有人能帮我理解是不是出了问题

    • 问题内容: 使用hashmap而不是使用对象类好吗……使用Hashmap…。 并使用对象类..... 请在应用程序运行状况,内存要求等方面告诉我… 问题答案: 这在很大程度上取决于您要实现的目标:为了提高灵活性,哈希映射会更好。但是灵活性是有代价的:哈希映射比具有相同数量的强类型字段的类还要大和慢。 哈希映射比具有相同数量字段的类具有更大的内存占用量 哈希图会强制对基元进行装箱 哈希图的创建和访问

    • 我需要从我的Android向Algolia发送数据,发送的数据应该是JSONObject格式(导入org.json.JSONObject) Algolia中的数据应采用此格式 所以在Android中,我这样设置代码 在这行代码中 那么我应该怎么做才能以JSONObject格式发送hashmap数据呢?

    • 问题内容: 我目前正在尝试制作一个将动词与西班牙语共轭的程序。我创建了一个哈希表,其中包含一个键和对象Ve​​rb的实例化。键是具有动词不定式形式的字符串(例如“ hablar”)。这是到目前为止我对哈希映射的代码: HashMap中每个动词的键都基于动词的不定式形式。例如,字符串“ hablar”是西班牙语动词的键。Verb类具有一个名为getInfinitive()的方法,该方法返回一个字符串

    • Hashmaps通常使用桶的内部数组(表)来实现。在通过键访问hashmap时,我们使用键类型特定(逻辑类型特定)的hash函数获得键的hashcode。然后我们需要将hashcode映射到实际的内部桶表索引。 有时,内部表可能会收缩和扩展,这取决于hashmap填充率。那么可能是散列码- 例如,我们的哈希函数返回32位无符号整数值 时刻A:内表容量为10000 时刻B:内工作台容量为100000

    • Javadoc说 返回一个收集器,该收集器将输入元素累加到一个新集合中。无法保证返回的集合的类型、可变性、可序列化性或线程安全性;如果需要对返回集进行更多控制,请使用toCollection(java.util.function.Supplier)。 所以似乎是一个避免出现问题的好主意。 我的问题是,尽管我尽了最大努力,我还是无法从中得到比 下面是我使用的代码: 那么,为什么Javadoc声明没有