【发布时间】:2015-09-06 14:11:13
【问题描述】:
为什么Hashmap 在内部使用LinkedList 而不是Arraylist 当两个对象放在哈希表的同一个桶中?
【问题讨论】:
-
考虑移除成本。
-
从 AL 中删除特定项目在时间和空间上都比从 LL 中更复杂。除此之外,根本没有使用 AL 的好处,例如通过索引查找项目
-
你还有两个问题是什么?
-
请注意,它使用的是链表,而不是 java.util.LinkedList。这些条目只是有一个指向桶中下一个条目的指针。这个列表一般应该只包含一个元素,或者至少很少,所以遍历成本不是问题。而且按索引访问也没用,所以不需要数组。
-
使用 ArrayList 会消耗太多内存(如果数组太大),或者需要频繁复制到更大的数组(如果数组太小)。链表OTOH使用的内存与元素的数量成正比,添加一个新条目总是O(1)。
标签: java data-structures hashmap