【问题标题】:Fast range/interval lookup for data in JavaJava中数据的快速范围/间隔查找
【发布时间】:2016-12-13 20:22:46
【问题描述】:

我有一个数据集,我需要从任意范围请求键、值数据(例如时间序列数据)。我该怎么做才能让它尽快运行?

我正在考虑类似于 Python pandas 进行范围切片的方式。

示例:

数据是key, value对:(0, value), (10, value), (20, value), (30, value), (41, value), (51, value), (60, value )...

查询:给我时间范围 10 到 40 的数据点。

一种可能性是构建一个区间树,遍历树以找到匹配的数组位置,然后使用 Arrays.copyOfRange。

【问题讨论】:

  • @J Wang 你想自己写还是可以用工具?

标签: java arrays algorithm indexing


【解决方案1】:

您可以使用NavigableMap(JDK 中有两个实现),它有一个类似于切片的subMap 方法。

或者ArrayList 的键、值对(按键排序)。使用Collection.binarySearch 查找范围的结尾,然后使用sublist 获取您的切片。

【讨论】:

  • ...一个 ordered ArrayList,或者一个数组,如果 Data 没有改变的话。
  • 列表总是有序的,但我会更新我的答案,说按时间排序。我没有指定使用数组,因为它没有切片方法,并且鉴于数组列表由数组支持,我看不出有太大区别。
猜你喜欢
  • 2014-10-27
  • 1970-01-01
  • 2021-07-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-14
  • 1970-01-01
  • 1970-01-01
  • 2020-08-14
相关资源
最近更新 更多