0

当我阅读 IoTDB 的源代码时,我发现也许我们可以在很多枚举类中添加一个 HashMap来改善从toTSEncoding查找的时间复杂度,例如: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;
}
4

1 回答 1

2

不必要。

枚举中只有 9 个条目。HashMap 是一种昂贵的数据结构,它O(1)可能不仅仅是O(n)这个简单的用例,特别是考虑到如何使用它。奇怪的是,编码方法并没有被普遍使用,而且最流行的方法是在它们使用的 switch 语句的早期确定的。

可以说,如果他们将解码列表放入静态数组并使用偏移量进行查找,那将是最快的。但是,可能还有其他原因,他们决定不想维护结构并加倍努力。

最后,我不知道这个查找是如何主线的。它多久发生一次,这个决定有多大影响?

另一个好处是,当前代码允许编译器潜在地对用简单、清晰、惯用的 Java 代码表达的内容进行一些很好的优化。会吗?我不知道,但它有机会。尤其是在 JIT 的动态环境中,当它收集有关其实际使用方式的统计数据时,它可能会在以后改变主意。

于 2021-10-24T02:17:16.813 回答