注意点1:初始容量设置
尽量根据业务场景设置合理的初始容量(2的幂次方),避免频繁扩容和数据迁移,以此提升性能;
注意点2:默认最大容量
- 表容量/桶个数最大为2^30(MAXIMUM_CAPACITY设定),当桶个数超过设定上限时不再扩容;
- 元素个数没有上限,当不断地往map中添加元素时,要么由于内存不够导致OOM,要么桶个数达到上限碰撞概率变大,导致map性能变差,实际生产中往往需要设定map的容量上限;
/**
* The maximum capacity, used if a higher value is implicitly specified
* by either of the constructors with arguments.
* MUST be a power of two <= 1<<30.
*/
static final int MAXIMUM_CAPACITY = 1 << 30;
注意点3:容量限制
如上所述,map中元素很多时可能会导致性能变差或者OOM,因此需要设定map元素个数的上限;
方式一:非精确控制容量
if(map.size() > MAX_CAPACITY){