当我阅读IoTDB的源代码时,我发现也许我们可以在许多枚举类中添加HashMap,如TSEncoding
,以提高从O(n)
查找到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;
}
不一定。
枚举中只有9个条目。HashMap是一种昂贵的数据结构,对于这个简单的用例,它的O(1)
可能比O(n)
更昂贵,特别是考虑到如何使用它。很可能这些编码方法没有被普遍使用,而且最流行的编码方法是在它们使用的switch语句的早期确定的。
最后,我不知道这个查找有多重要。这种情况发生的频率有多高,这个决定的影响有多大?
另一个好处是,当前代码允许编译器在简单、清晰、惯用的Java代码中进行一些很好的优化。将它吗?我不知道,但它有机会。特别是在JIT的动态环境中,当它收集实际使用情况的统计数据时,可能会改变它的想法。