在看IoTDB的原始碼的時候,我發現也許我們可以在很多列舉類中添加一個HashMap,比如TSEncoding提高從O(n)to查找的時間復雜度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;
}
uj5u.com熱心網友回復:
不必要。
列舉中只有 9 個條目。HashMap 是一種昂貴的資料結構,對于這個簡單的用例,它很O(1)可能不僅僅是HashMap O(n),特別是考慮到如何使用它。奇怪的是,那時的編碼方法并沒有被普遍使用,而且最流行的編碼方法是在它們使用的 switch 陳述句的早期確定的。
可以說,如果他們將解碼串列放入靜態陣列并使用偏移量來查找它,那將是最快的。但是,可能還有其他原因,他們決定不想維持結構并多走一英里。
最后,我不知道這個查找是如何主線的。它多久發生一次,這個決定有多大影響?
另一個好處是當前的代碼允許編譯器對用簡單、清晰、慣用的 Java 代碼表達的內容進行一些很好的優化。會嗎?我不知道,但它有機會。特別是在 JIT 的動態環境中,當它收集實際使用方式的統計資料時,它可能會在以后改變主意。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/334105.html
標籤:爪哇 数据库 时间序列 apache-iotdb 数据库
