2016-12-13 69 views
0

我有一個數據集,我需要從任何任意範圍請求鍵值數據(例如時間序列數據)。我如何做到這一點,以便儘可能快地運行?Java中的數據的快速範圍/間隔查找

我想到類似於Python熊貓如何進行範圍切片的事情。

實施例:

數據是鍵,值對:(0,值),(10,值),(20,值),(30,值),(41,值),( 51,值),(60,值)...

查詢:給我數據,從時間點爲10〜40

一種可能性是建立間隔的樹,遍歷樹來查找匹配數組的位置,然後使用Arrays.copyOfRange。

+0

@J王你想寫自己還是可以使用工具? – vahid

回答

3

我可以使用NavigableMap(在JDK中有兩種實現方式),它有一個類似於片段的subMap方法。

或者是Key,Value對的ArrayList(按鍵排序)。使用Collection.binarySearch找到範圍的結尾,然後用sublist找到您的切片。

+0

...一個_ordered_ ArrayList,或一個數組,如果'數據'沒有改變。 – greybeard

+0

列表總是有序的,但我會更新我的答案,以按時間排序。我沒有指定使用數組,因爲它沒有切片方法,並且由於ArrayList支持數組,我沒有看到有太大的區別。 – brain