主要考察HashMap 的扩容机制
HashMap 扩容(rehashing)是一个相对昂贵的操作,它会重新计算所有元素的位置并分配到新的桶数组中。
以下是避免扩容和减少扩容影响的方法
1. 初始化时设置合理容量
最佳实践:根据预期元素数量初始化HashMap
// 公式:initialCapacity = (expectedSize / loadFactor) + 1
// 默认负载因子0.75,所以:
int expectedSize = 100;
Map<String, User> userMap = new HashMap<>((int)(expectedSize / 0.75f) + 1);
2. 选择合适的负载因子(load factor)
// 如果内存充足且追求查询性能,可以降低负载因子
Map<String, User> lowLoadFactorMap = new HashMap<>(100, 0.5f);
// 如果内存紧张,可以适当提高负载因子(但会增加哈希冲突)
Map<String, User> highLoadFactorMap = new HashMap<>(100, 0.9f);
3. 扩容机制的影响
HashMap扩容时:
创建新数组(通常2倍大小)
重新计算所有元素的哈希和位置(rehash)
迁移所有元素到新数组
这是一个O(n)操作