Pracuję nad sposobami optymalizacji LinkedList's. Czy ktoś wie, czy domyślnie podwójnie połączona Java klasy LinkedList jest zoptymalizowana do wykonywania operacji odwrotnej? Na przykład:Czy lista powiązań Java jest zoptymalizowana, aby w razie potrzeby uzyskać (indeks) odwrotność?
// Some LinkedList list that exists with n elements;
int half = list.size()/2;
list.get(half + 1);
Czy wezwanie do list.get(half + 1)
zoptymalizować szukanie i pójść w odwrotnym kierunku, ponieważ jest to podwójnie połączonej listy? Bardziej sensowne byłoby wykonanie wyszukiwania od końca i przejście do środka, jeśli wiesz, że element znajduje się na drugiej połowie listy.
Wiem, że używanie get(index)
jest O(n)
czasu i że powinieneś używać iteratora podczas przechodzenia przez LinkedList, ale jestem po prostu ciekawy.
Jest tam w trzecim akapicie javadocs (drugi akapit w Javie 7): 'Operacje, które są indeksowane na liście, będą przechodzić przez tę listę od początku do końca, w zależności od tego, który z nich jest bliżej określonego indeksu." – yshavit
Po prostu Zauważ, że z POV wydajności większość zastosowań LinkedList i tak jest błędem. – maaartinus