初始化Map大小并非用多少指定多少

简介: 初始化HashMap时,指定容量并非直接生效,而是会调整为最近的2的幂次(如1变2、3变4)。为避免扩容开销,建议使用Guava的Maps.newHashMapWithExpectedSize(),或手动按公式:容量 = 预期元素数 / 0.75 + 1 进行设置,提升性能。

● 初始化Map并非用多少初始化Size是多少,建议使用Guava,避免扩容引起的动荡()
说明
● 如:Map map = new HashMap<>(1); 在具体使用时,并非size=1,而是最近的2的幂等,如1实际是2,3实际是4,9实际是16
使用方法
● 依赖gvaua:Map map = Maps.newHashMapWithExpectedSize(7);


com.google.guava
guava
17.0

● 手动声明:Map map = new HashMap<>(实际存储个数 / 0.75 + 1);

相关文章
|
21小时前
|
存储 Java 编译器
.泛型擦除引起的问题及解决方法
Java泛型类型检查在编译时针对引用而非对象本身。即使类型擦除后变为Object,编译器仍会根据引用的泛型声明(如ArrayList&lt;String&gt;)对add等方法调用进行类型检查。直接使用原始类型(如ArrayList)会失去泛型保护,仅产生警告。因此,类型安全由引用决定。
|
20小时前
|
存储 关系型数据库 MySQL
业务应用场景
传统关系型数据库(如MySQL)难以应对“三高”挑战:高并发读写、海量数据存储访问,以及高可扩展性与高可用性需求,在Web2.0时代面临性能与扩展瓶颈。
|
20小时前
|
安全 编译器
自动类型转换
由于类型擦除,泛型在运行时会被替换为原始类型,但编译器会在获取泛型对象时自动插入强制类型转换。如ArrayList.get()方法中,return前会根据泛型类型(如Date)自动添加强转,无需手动转换。同理,访问泛型字段时也会自动插入类型转换,确保类型安全,简化代码。
|
20小时前
|
Java 编译器
泛型擦除与多态的冲突与解决方法
泛型类 `Pair&lt;T&gt;` 在类型擦除后,其泛型变为 `Object`,子类 `DateInter` 重写 `setValue(Date)` 和 `getValue()` 时,实际覆盖的是原始方法。由于擦除后父类方法参数为 `Object`,子类 `Date` 方法看似重写,实为桥接方法实现的“伪重载”。编译器生成桥接方法以保证多态,虚拟机通过签名区分方法,实现泛型多态性。
|
20小时前
泛型在静态方法和静态类中的问题
泛型类的静态成员不能使用类声明的泛型参数,因静态成员不依赖对象实例,而泛型类型在对象创建时才确定。如`public class Test2&lt;T&gt;`中,`static T one`会编译错误。但泛型方法可独立定义类型参数,如`public static &lt;T&gt; T show(T one)`正确,其T与类无关。
|
20小时前
|
Java 调度
线程池
线程池通过池化技术管理多个线程,避免频繁创建和销毁的开销,提升多线程编程效率。它自动调度线程复用,减少资源消耗与上下文切换,适用于高并发场景。使用时只需提交任务,无需关注线程生命周期,极大简化了并发编程。
|
20小时前
|
监控 算法 Unix
Thread.sleep(0) 到底有什么用
Thread.Sleep用于暂停线程执行,Sleep(1000)不保证精确唤醒时间,因系统调度受优先级和竞争影响;Sleep(0)则触发立即重新分配CPU,让其他线程有机会执行,避免界面假死。两者作用显著不同。
|
20小时前
|
存储 NoSQL 物联网
MongoDB应用场景
MongoDB适用于社交、游戏、物流、物联网及直播等场景,因其支持海量数据存储、高频读写操作。用户信息、动态、日志等低事务性、高并发数据可高效存取,尤其适合用嵌套结构与地理位置索引优化查询,是大规模非结构化数据存储的理想选择。(238字)
|
20小时前
|
存储 NoSQL 定位技术
MongoDB什么时候用
若应用无需事务与复杂关联查询,且需高并发、海量存储、快速扩展、高可用及多样查询支持,符合一两点即可考虑MongoDB,两项以上则为理想之选。
|
20小时前
|
JSON NoSQL 关系型数据库
MongoDB简介
MongoDB是一款开源、高性能、无模式的文档型数据库,采用类似JSON的BSON格式存储数据,结构灵活,支持复杂数据类型。文档以键值对形式组织,兼具灵活性与扩展性,是最接近关系型数据库的NoSQL产品,适用于快速开发与大规模扩展场景。