为何TreeMap内存占用与HashMap相当?理论与测试不符求解
TreeMap 与 HashMap 内存占用疑惑
传统观点认为TreeMap是比HashMap内存效率更高的数据结构[1,2,3]
TreeMap相比HashMap更节省内存,因为它仅使用存储元素所需的内存,而HashMap使用连续内存区域
但测试结果却与之相反[例如4]。
例如,以下是向HashMap和TreeMap插入100万条键值对的测试结果,键为long类型,值为String类型,L为String的长度。
HashMap(L=100,有序插入)
| N(数量) | time(ms)(耗时,毫秒) | memory (bytes)(内存,字节) |
|---|---|---|
| 100,000 | 97 | 21,048,640 |
| 200,000 | 472 | 42,097,216 |
| 300,000 | 887 | 62,097,216 |
| 400,000 | 1,424 | 84,194,368 |
| 500,000 | 2,127 | 104,194,368 |
| 600,000 | 2,985 | 124,194,368 |
| 700,000 | 4,041 | 144,194,368 |
| 800,000 | 5,186 | 168,388,672 |
| 900,000 | 6,478 | 188,388,672 |
| 1,000,000 | 7,971 | 208,388,672 |
TreeMap(L=100,有序插入)
| N(数量) | time(ms)(耗时,毫秒) | memory (bytes)(内存,字节) |
|---|---|---|
| 100,000 | 118 | 20,800,048 |
| 200,000 | 585 | 41,600,048 |
| 300,000 | 1,239 | 62,400,048 |
| 400,000 | 2,166 | 83,200,048 |
| 500,000 | 3,415 | 104,000,048 |
| 600,000 | 4,910 | 124,800,048 |
| 700,000 | 6,668 | 145,600,048 |
| 800,000 | 8,707 | 166,400,048 |
| 900,000 | 11,059 | 187,200,048 |
| 1,000,000 | 13,648 | 208,000,048 |
我尝试了不同的L值(最低为L=1)以及随机插入顺序,得到的结果一致——TreeMap占用的内存与HashMap相当。
从理论上讲,由于HashMap的加载因子为0.75(意味着至少25%的空间被浪费)[5],TreeMap应该比HashMap节省至少约25%的内存(比如当L=1时)。
这是为什么?有人能解释吗?
内容的提问来源于stack exchange,提问作者morpheus
相关产品推荐
相关产品推荐

