trzeba utworzyć dużą listę n elementów (może być do 100000). każdy element na liście jest liczbą całkowitą równoważną indeksowi listy. Po tym muszę wywołać Collections.shuffle na tej liście. Moje pytanie dotyczy tego, która implementacja list (kolekcje java lub zbiory apache) powinna być używana. Moim zdaniem jest ArrayList. Wszystkie myśli są doceniane. Dzięki!Jaka jest najlepsza realizacja Lista dla dużych list w Javie
Dzięki za dane wejściowe. Myślę, że trzymam się ArrayList. Obecnie używam konstruktora ArrayList z parametrem initialCapacity i przekazuję rozmiar listy. Więc jeśli oryginalna lista to 100000, tworzę tę nową listę z nową tablicą ArrayList (100000); Dlatego myślę, że nie mam stworzyć tablicy i zrobić asList, ponieważ nie będzie żadnej zmiany rozmiaru. Poza tym większość zbiorów apache takich jak GrowthList & LazyList nie implementuje RandomAccess. To na pewno spowolniłoby przetasowanie (jak na javadocs). FastArrayList implementuje RandomAccess, ale apache ma dla tej klasy notatkę: "Ta klasa nie jest wieloplatformowa, a używanie jej może spowodować nieoczekiwane awarie na niektórych architekturach".
Czy mógłbyś wyjaśnić cel, który chcesz osiągnąć? – rsp
Co robisz z listą po dodaniu i tasowaniu? Czy dodajesz/usuwasz elementy na środku? Czy dodajesz/usuwasz elementy na końcach? Czy uzyskujesz dostęp do elementów w środku w dowolnej kolejności, czy robisz jedno przejście od jednego końca do drugiego? Naprawdę trudno jest zdecydować, nie wiedząc, co to ma zamiar z tym zrobić. Jeśli chcesz tylko dodać numery seryjnie i przetasować, powiedziałbym, że ArrayList jest odpowiedzią. – MAK
100000 nie jest tak duże w tych dniach. Wykonanie tego w najbardziej naiwny sposób z listą tablic zajmuje mniej niż 100 ms na moim komputerze (pojedynczy rdzeń procesora Intel Core2 T5600 przy częstotliwości 1,83 GHz). – starblue