LinkedHashMap
nie oferuje sposób na rozpoczęcie iteracji w środku jego uporządkowanego widzenia danych mapy. Przypuśćmy, że chcesz użyć wszystkich dat po jakimś numerze Date d
i powtórzyć te, a następnie powinieneś zapisać swoją mapę jako TreeMap
. Ważnym rozróżnieniem jest to, że zamawianie LinkedHashMap
jest zamawiania-zamówienia, a naszym domniemanym przypadkiem użycia jest to, że chcesz mieć naturalny klucz-zamówienie. TreeMap
s utrzymują taki widok, sortując zawartość mapy za pomocą klawisza mapy.
TreeMap
s mają dodatkową zaletę, że pozwala na tworzenie plasterków mapie opartej na kluczu, więc można zadzwonić tailMap(K k)
, aby powrócić mapę z wszystkie przyciski występujące po k
. W takim przypadku możesz zadzwonić pod numer tailMap
z punktem początkowym, d
.
np .:
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
sposób powraca SortedMap
, co nie jest iterowalny. Ale ma on metodę entrySet
zwracającą Set
, która jest podinterfejsem Iterable
.
Wygodnie, jeśli chcesz zachować przechowywania danych w LinkedHashMap
można po prostu załadować do TreeMap
z bieżącej instancji (z jakiegoś kompromisu wydajności, oczywiście):
TreeMap<Date, Double> dateSortedDateForPrice = new TreeMap<Date, Double>(dateForPrice);
Nawet jeśli można przejść do w określonym miejscu kolejność iteracji 'LinkedHashMap' będzie * porządkiem wstawiania *, a nie naturalną kolejnością klawiszy; czy tego chcesz? –
Tak, właśnie tego chcę. Cena akcji zostanie dodana w kolejności od daty. –