IoTDB枚举查找为何不用HashMap实现O(1)效率而非逐一比较
IoTDB枚举类查找未使用HashMap优化的原因分析
你提到的基于HashMap的O(1)枚举查找优化方案参考实现如下:
private static final Map<Byte, TSEncoding> map = new HashMap<>(); static { TSEncoding[] array = TSEncoding.values(); for (TSEncoding e : array) { map.put(e.type, e); } } private static TSEncoding getTsEncoding(byte encoding) { TSEncoding ret = map.get(encoding); if (ret == null) { throw new IllegalArgumentException("Invalid input: " + encoding); } return ret; }
未采用该方案而使用逐一遍历的原因主要有三点:
- 小数据量下遍历性能更优
类似TSEncoding的业务枚举通常枚举项数量不超过10个,此时O(n)遍历的实际耗时远低于HashMap的哈希计算、寻址、碰撞校验开销。且values()返回的数组为连续内存存储,CPU缓存命中率极高,进一步放大了遍历的性能优势。 - 代码可维护性更高
直接遍历枚举的实现仅需数行代码,不需要额外维护静态Map、编写静态初始化块,代码更简洁易懂,不会引入额外的初始化错误、内存占用等隐性问题。 - 优化收益可忽略
这类枚举查找方法通常不属于系统热路径,即使调用频率较高,两种实现的性能差异也在微秒级,完全不会影响系统整体性能,优先保证代码简洁性是更合理的架构选择。
内容的提问来源于stack exchange,提问作者Yuan Tian
相关产品推荐
相关产品推荐

