Мне интересно, есть ли более эффективный метод для получения объектов из моей LinkedHashMap с отметками времени, превышающими указанное время. т.е. что-то лучше, чем следующее:
Iterator<Foo> it = foo_map.values().iterator();
Foo foo;
while(it.hasNext()){
foo = it.next();
if(foo.get_timestamp() < minStamp) continue;
break;
}
В моей реализации каждый из моих объектов имеет по существу три значения: «id», «timestamp» и «data». Объекты вставляются в порядке их временных меток, поэтому, когда я вызываю итератор для набора, я получаю упорядоченные результаты (как того требует связанный контракт хэш-карты). Карта привязана к идентификатору объекта, поэтому я могу быстро найти их по идентификатору.
Однако, когда я просматриваю их по условию метки времени, я получаю итератор с отсортированными результатами. Это улучшение по сравнению с общей хэш-картой, но мне все еще нужно последовательно перебирать большую часть диапазона, пока я не найду следующую запись с более высокой меткой времени, чем указанная.
Поскольку результаты уже отсортированы, есть ли какой-либо алгоритм, которому я могу передать итератор (или коллекцию), который может выполнять поиск быстрее, чем последовательный? Если бы я выбрал древовидную карту в качестве альтернативы, дало бы это общее преимущество в скорости, или оно делает то же самое в фоновом режиме? Поскольку коллекция уже отсортирована по порядку вставки, я думаю, что у древовидной карты гораздо больше накладных расходов, которые мне не нужны?