问题来源美团CRM后端团队:https://www.iteye.com/topic/1134016
刚学java萌新一看:只装载100个元素,本着厉行节约的原则,直接给100不就行了
一年java菜鸟一看:有坑……好像扩容因子是0.75,应该是100/0.75
两年java初级一看:想坑我~ tableSizeFor,所以最好应该是128~
三年java码农一看:还是太年轻~
其实问的就是HashMap的初始化策略,拷问的是对HashMap底层实现的掌握程度
上源码:
第一步:
/**
* Constructs an empty <tt>HashMap</tt> with the specified initial
* capacity and the default load factor (0.75).
*
* @param initialCapacity the initial capacity.
* @throws IllegalArgumentException if the initial capacity is negative.
*/
public HashMap(int initialCapacity) {
this(initialCapacity, DEFAULT_LOAD_FACTOR);
}
看最后那步的构造函数
/**
* Constructs an empty <tt>HashMap</tt> with the specified initial
* capacity and load factor.
*
* @param initialCapacity the initial capacity
* @param loadFactor the load factor
* @throws IllegalArgumentException if the initial capacity is negative
* or the load factor is nonpositive
*/
public HashMap(int initialCapacity, float loadFactor) {
if (initialCapacity < 0)
throw new IllegalArgumentException("Illegal initial capacity: " +
initialCapacity);