如果我有一个像这样的大番石榴桌:
Table<Foo, Range<Long>, Bar> myTable;
我有一个很长的值,还有一个Foo对象 - 我希望得到一个包含我的long的Range对象。
现在,我能做的最好的事情就是在我需要的范围内使用Foo键获取所有Bar:
Map<Range<Long>, Bar> row = cache.row(myFoo);
for (Range<Long> range : row.keySet()) {
if (range.contains(myLong)) {
return Arrays.asList(sample.get(myLong));
}
}
正如你所看到的,我正在抓住桌子上的那一行,并在范围内迭代寻找我的一个包含myLong的封闭范围的Bar。
有没有更好的方法来找到没有for循环的对象?从那个Ranges列中获取RangeMap的速度可能比那个循环更快?
答案 0 :(得分:0)
Map<Foo, RangeMap<Long, Bar>>
听起来在这里非常合适。它不像Table
那样漂亮,但它是在不到线性时间内执行该操作的唯一方法。