LinkedHashMap
не предлагает способ начать итерацию в середине своего упорядоченного представления данных карты. Предположим, что ваш сценарий использования действительно заключается в том, что вам нужны все даты после некоторого Date d
и для их повторения, тогда вам, вероятно, следует сохранить свою карту как TreeMap
. Важным отличием здесь является то, что LinkedHashMap
- это порядок вставки , и наш предполагаемый вариант использования здесь заключается в том, что вам нужен естественный порядок ключей . TreeMap
s поддерживает такой вид, сортируя содержимое карты по ключу карты.
TreeMap
s имеют дополнительное преимущество, позволяя вам создавать фрагменты карты на основе ключа, поэтому вы можете вызвать tailMap(K k)
, чтобы вернуть карту со всеми ключами, встречающимися после k
. В этом случае вы можете позвонить tailMap
со своей начальной точкой, d
.
например:.
TreeMap<Date, Double> dateForPrice;
// load up dateForPrice
Date start = // the point to start your iteration
for(Entry<Date, Double> entry : dateForPrice.tailMap(start).entrySet()){
// loop code
}
tailMap
метод возвращает SortedMap
, что не может быть повторено. Но у него есть entrySet
метод, возвращающий Set
, который является подинтерфейсом Iterable
.
Удобно, если вы хотите сохранить данные в LinkedHashMap
, вы можете просто загрузить TreeMap
с вашим текущим экземпляром (конечно, с некоторым компромиссом производительности):
TreeMap<Date, Double> dateSortedDateForPrice = new TreeMap<Date, Double>(dateForPrice);