100行User的List怎么高效转为Map,不使用stream

主要考察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)操作

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容