我在互联网上读到,在碰撞的情况下,put()将元素插入到链表的“头部”。
例如:
地图位置1有1,0 - > 2,0 - > 3,0 - > 4,0 - >空
现在,我将向链表中插入一个元素5,0(我希望hash()返回元素5的位置1值)。插入后,位置1链接列表将是5,0 - > 1,0 - > 2,0 - > 3,0 - > 4,0 - >空
现在,我想更新3到30的值。因此我使用map.put(KEY = 3,VALUE = 30);
我的问题是put()如何知道是更新还是插入?
要知道元素是否存在于链表中,它必须扫描链表。根据我在互联网上看到的内容,如果发生冲突,put()会在链表的“头部”插入元素。
提前致谢
答案 0 :(得分:0)
task = @task.first
# get all associated task products
task.task_products
# get store order
task.store_order
# iterate all tasks
@tasks.each do |task|
#iterate all task_products
task.task_products.each do |task_product|
end
#iterate store order
task.store_order do |store_order|
end
end
答案 1 :(得分:0)
我的问题是put()如何知道是更新还是插入?
必须在哈希表中获取与给定键相关联的存储桶,并迭代存储在那里的链表以尝试查找与键和提供的值匹配的元素。如果找到这样的元素,它将使用新值更新,否则将在链接列表的头部添加一个新元素。
为了保持此操作的有效性(摊销的常量时间),每个元素的链表应尽可能短。这可以通过以下方式完成:
答案 2 :(得分:0)
如果发生碰撞,如果已经有一个对象位于计算索引上,则会检查其下一个属性。如果为null,则当前Entry对象成为LinkedList中的下一个节点。如果next变量不为null,则执行procedure直到next被计算为null。
您可以从以下视频中了解详情:“分钟3:26:
但是如果你需要在1.地方添加项目,你可以使用以下答案: