Map
和 order的组合List
呢?该地图有一个复合键userId
and measureName
,值是日期范围和 double 的排序列表value
:
Map<Key,List<Entry>> data = new HashMap<>();
List<Entry> entries = data.get(new Key(userId, measureName));
int i = Collections.binarySearch(entries, new Entry(searchDate,searchDate, 0.0));
double value = i < 0 ? 0.0 : entries.get(i).value;
Key
必须实现hashCode()
和equals()
使用其成员userId
和measureName
. Entry
如果一个范围是另一个范围的一部分,则必须实现Comparable<Entry>
wherecompareTo()
必须返回 0(startDate 比较 <= 0 并且 endDate 比较 >= 0 或 0 如果 startDate 比较 >= 0 并且 endDate 比较 <= 0)否则比较 startDate+ (endDate-startDate)/2 (范围的中间)与 double 无关value
。
如果您主要阅读而不修改此结构,它应该很快。如果使用较多,比较将被编译为本机。如果该功能仅适用于单个用户并进行度量,则可以仅使用排序列表,如果仅适用于单个用户,则可以创建 Map<UserId<Map<MeasureName,List<Entry>>>>
类似的结构。
首先尝试一个简单的解决方案,前后测量,仅在需要时进行性能优化。