2012-11-19 32 views
0

从我明白包含HashMap的,内部数据结构可以被看作是一个二维数组。第一个索引是“key”,第二个索引是包含散列到同一个键的值的数组。在我看来,你需要初始化一个足够大的数组来计算未来的条目(否则你需要在某个点放大数组或者所有值散列为相同的值)。由于初始化一定大小的数组的初始成本,这意味着hashmaps相对于链表具有较高的初始成本。根据需要代表项目的X个HashMap是否需要比链表更多的内存?

的LinkedList只需要尽可能多的内存。我在这个假设中纠正了吗?我只是很困惑,因为很多人说LinkedList使用更多的内存。

回答

0

你忘记了,地图具有键和值。因此,对于列表中的每个项目,地图中都有2个项目。因此,如果LinkedList在存储方面的成本为n,则该地图将需要2n。除此之外,正如你所指出的那样,你必须有一些自由空间,所以现在你可以达到2n + 2n * .c,这是(1 + c)2n,其中c是一些像.25的分数。

那么与链表相比,这是否符合“高”空间要求?我不这么认为,除非你有限制的内存要求。请记住,您还可以持续访问任何元素,其中链接列表的O(n)用于访问。最后,因为Maps处理具有键和值的问题,列表主要关注值,所以应用这些数据结构的问题往往不同,所以这个问题可能没有多大意义。

0

只是一些数字:

的空HashMap需要128个字节: 的开销是64个字节加上每条目36个字节。 对于10K条目,预计开销为〜360K

空LinkedList需要48个字节:开销是24个字节,每个条目加24个字节。 对于10K条目,预期开销是〜240K

源:http://www.ibm.com/developerworks/java/library/j-codetoheap/

Image from google search

相关问题