如何设置一个Map的初始容量?默认的15太大了。

prhanxben 2011-06-05 05:43:25
如题,我的map很小,不想浪费空间,想用参数设成5个,如下
Map<String,String> m = new HashMap<String,String>(6);

但执行的时候却给分配了8个key=value的空间。

经测试参数小于等于8的时候都是给分配8个。 而当参数为9的时候又给分配了16个!

彻底晕了,请问怎么写这个初始化参数才能得到我想要的大小? 比如一个capacity小于5个Map
...全文
2707 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
prhanxben 2011-06-05
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 dreamhunter_lan 的回复:]

默认大小是16
为了提高效率,Map的容量会是2的幂
假如构造方法中传的是initialCapacity,内部其实这样的:
// Find a power of 2 >= initialCapacity
int capacity = 1;
while (capacity < initialCapacity)
capacity <<= 1;
所以真正的大小一定是大于等于i……
[/Quote]
感谢!茅塞顿开!
leewon1988 2011-06-05
  • 打赏
  • 举报
回复
几个构造函数中没有这个么?
dreamhunter_lan 2011-06-05
  • 打赏
  • 举报
回复
默认大小是16
为了提高效率,Map的容量会是2的幂
假如构造方法中传的是initialCapacity,内部其实这样的:
// Find a power of 2 >= initialCapacity
int capacity = 1;
while (capacity < initialCapacity)
capacity <<= 1;
所以真正的大小一定是大于等于initialCapacity最小的2的幂
有点笨 2011-06-05
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jqctop1 的回复:]
HashMap(int initialCapacity )的默认加载因子是0.75

你用HashMap(int initialCapacity, int loadFactor)来构造一个Map实例,指定loadFactor为1就

可以了
[/Quote]
抱歉,第二个参数是float型的,写错了
有点笨 2011-06-05
  • 打赏
  • 举报
回复

HashMap(int initialCapacity )的默认加载因子是0.75

你用HashMap(int initialCapacity, int loadFactor)来构造一个Map实例,指定loadFactor为1就

可以了
danliandejintou 2011-06-05
  • 打赏
  • 举报
回复
坐等高人回答这个我觉得很蛋疼的问题。

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧