数据压缩方案之高性能集合 IntObjectHashMap

IntObjectHashMap是Netty框架中的一个类,提供比JDKHashMap更高的内存效率,因为它不创建Integer对象,减少40%至60%的存储开销。它使用线性探测的开放寻址法处理哈希冲突,这在冲突严重时可能比HashMap的链表法查询更快,但扩容性能较差。此外,org.antlr.v4.runtime.misc.IntSet也是另一种内存压缩的数据结构。

IntObjectHashMap的使用方法和JDK的HashMap一致

IntObjectHashMap<String> intObjectHashMap = new IntObjectHashMap<>();

intObjectHashMap.put(1, "a");
intObjectHashMap.put(2, "b");

String s = intObjectHashMap.get(1);

经测算,存入1万数据,
IntObjectHashMap<V>相较HashMap<Integer, V>对于结构存储开销降低40%~60%
不生成Integer对象,GC性能也更好。

IntObjectHashMap是Netty中的一个类,路径:io.netty.util.collection.IntObjectHashMap

类继承关系图

IntObjectHashMap的key是基本类型int类型,比包装的Integer类型占用内存小。

IntObjectHashMap的value就是真实的value,不像HashMap内部维护的Node,也会更节约内存。

IntObjectHashMap没有和JDK的HashMap一样,使用链表法来解决hash冲突,而是使用了线性探测策略的开放寻址法,由于使用开放寻址,在hash碰撞较为严重的场合,其查询性能比HashMap会更好,但是其扩缩容的代价会比HashMap更大,性能更糟。 

其他集合

 

以及其他包下的集合,org.antlr.v4.runtime.misc.IntSet 也可以压缩数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值