2013-09-27 18 views
15

Zastanawiam się, dlaczego LinkedList nie ma initialCapacity.dlaczego LinkedList nie ma initialCapacity w java?

Dobrze wiem, kiedy używać ArrayList i kiedy LinkedList.

Jego dobra praktyka, aby określić kolekcję ostatecznej wielkości takich jak:

List<String> arraylist = new ArrayList<String>(5); 

Dla LinkedList na przykład:

List<String> linkedlist = new LinkedList<String>(); // right way 

ale

List<String> arraylist = new LinkedList<String>(5); // compilation error 

Może ktoś rozprzestrzeniać światło w tej sprawie?

[EDIT]

BTW, mogę napisać

List<String> arraylist = new ArrayList<String>(5); 
List<String> linkedlist = new LinkedList<String>(arraylist); 
+2

odpowiadając na pytanie * dlaczego w dół? * Pytanie: [SO zachęca do wcześniejszego zastanowienia się i poszukiwania] (http://stackoverflow.com/help/how-to-ask) przed zadaniem pytania. Miliardy stron w Internecie wyjaśniają różnicę między ArrayList i LinkedList, a biorąc pod uwagę wiedzę o ich wnętrzach, dość łatwo zrozumieć, dlaczego nie istnieje taka metoda. Zadawanie go na SO oznacza po prostu, że nie próbowałem robić podstawowych badań z google. –

+3

Mogę otworzyć dokumentację (zrobiłem) i dowiedzieć się wszystkiego, czego potrzebuję. Każdy, kto chce szybko znaleźć krótki opis (z obrazkami) na wyżej wspomnianym pytaniu, znajdzie 4-5 całkiem niezłych odpowiedzi zamiast poświęcać czas na skanowanie dokumentacji. Teraz w dodatkowych miliardach stron mamy jeszcze jeden. SO polega nie tylko na znalezieniu rozwiązania "solo", ale także na szybkim uruchomieniu. Piszę dzisiaj w ~ 7 językach i nie mam czasu na skanowanie oryginalnego dokumentu. ale znajdź udział exp. od innych programistów. –

Odpowiedz

28

LinkedList według natury nie ma "zdolności", ponieważ nie przypisuje pamięci do elementów, zanim elementy zostaną dodane do listy. Każda pozycja w LinkedList zawiera wskaźnik do następnego na liście.

http://www.stoimen.com/blog/wp-content/uploads/2012/06/0.-Arrays-vs.-linked-list.png

Nie byłoby sensu przydzielania pamięci na liście wcześniej, ponieważ LinkedList nie posiada zdolności.

+0

"V" dla opublikowanego obrazu, dziękuje –

+0

Tak więc myślę, że ArrayList jest strukturą danych opartą na tablicy, ponieważ przyjmuje początkową zdolność do gromadzenia. – Ajay

8

Jego model nie jest oparta na tablicy lecz prawdziwa lista powiązane, a więc nie ma potrzeby, a ponadto to byłoby to nie ma sensu. Nie ma większego sensu, aby puste linki, takie jak Ty, miały puste elementy tablicy.

2

Dlaczego LinkedList ma pojemność początkową?

ArrayList jest wspierany przez tablicę, więc początkowa pojemność to początkowy rozmiar tablicy. LinkedList nie potrzebuje tego.

2

Dlaczego potrzebujesz pojemności na liście kontaktów? LinkList nie działa z tablicami o ustalonych rozmiarach. Każdy obiekt LinkedListElement ma wskaźnik (link!) Do następnego elementu na liście. Który z tego powodu możliwe jest dodanie elementu do połączonej listy w stałym czasie. Ale kosztowne jest mieć losowy dostęp do elementów na liście. Musisz przejść przez wszystkie elementy na liście, aż dotrzesz do celu.

1

Lista odnośników nie potrzebuje wartości początkowej. To jest podstawowa różnica między tablicą a połączoną listą.

tablica gdzieś się zakończy. Ale nie na liście powiązanych. Lista połączona nie działa na wartościach brzegowych.

1

Po zadeklarowaniu tablicy należy znać jej rozmiar, ponieważ wskaźniki muszą być tworzone w pamięci. Lista połączona nie jest potrzebna, ponieważ nie ma potrzeby wskazywania pamięci, zanim dowolny obiekt zostanie dodany do listy.

połączonej listy jest zdefiniowany rekurencyjnie jako: pustej listy pl elementem, który wskazuje na pustą listę

dlatego kiedy tylko dodać element, należy przydzielić pamięci (lub raczej w Javie kompilator robi to), gdy Tworzysz element, a kiedy dodasz go do listy, wskazuje on teraz na listę (lub ostatni element na liście wskazuje na nią).

Nie trzeba zadeklarować początkowego rozmiaru połączonej listy, ponieważ połączona lista zawsze zaczyna się od pustej listy, a po dodaniu elementu wskazuje na listę.

Powiązane problemy