Lista tablic i lista połączona to wspólne terminy dane przechowywanie i odzyskiwanie. Chociaż istnieje wiele urządzeń pamięci masowej, ostatecznie zależą one od mechanizmu przechowywania. Te dwa mechanizmy przechowywania danych umieszczają dane w urządzeniach magazynujących i pobierają je w razie potrzeby. Chodźmy brać zobacz, jak przechowują dane w swojej pamięci. Lista Array korzysta z pamięci sekwencyjnej, a fragmenty danych są przechowywane jeden po drugim. Jest to prawdopodobnie prostsza forma przechowywania - pozwala uniknąć nieporozumień. Tak, możemy pobrać następny element lub dane z następnego miejsca w pamięci listy tablic; jednak jest przechowywany za pomocą wskaźników na liście Połączone. Tutaj potrzebujemy dwóch lokalizacji pamięci do przechowywania - jednej dla danych, drugiej dla wskaźnika. Wskaźnik odnosi się do lokalizacji pamięci kolejnych danych. Możemy łatwo zrozumieć, że lista Linked nigdy nie przechowuje danych sekwencyjnie; raczej używa mechanizmu losowego przechowywania. Wskaźniki są kluczowymi elementami w lokalizowaniu lokalizacji danych w pamięci.
Omówiliśmy już, w jaki sposób oba mechanizmy przechowywania danych umieszczają dane, i możemy podać termin „tablica dynamiczna” dla Schemat pamięci wewnętrznej listy tablic. Po prostu umieszcza elementy danych jeden po drugim - stąd nazwa - podczas gdy lista Połączone wykorzystuje listę wewnętrzną za pomocą wskaźników do śledzenia następnego elementu. Dlatego używa wewnętrznej listy połączonej, takiej jak lista połączona pojedynczo lub podwójnie, aby pokazać nam następne dane.
Ponieważ lista Array przechowuje tylko rzeczywiste dane, potrzebujemy miejsca tylko na dane, które przechowujemy. I odwrotnie, na liście połączonych również używamy wskaźników. Dlatego wymagane są dwie lokalizacje pamięci i możemy powiedzieć, że lista połączona zużywa więcej pamięci niż lista Array. Zaletą listy Linked jest to, że nigdy nie wymaga ciągłych lokalizacji pamięci do przechowywania naszych danych, w przeciwieństwie do listy Array. Wskaźniki są w stanie utrzymać pozycję następnej lokalizacji danych, a nawet możemy użyć mniejszych gniazd pamięci, które nie są ciągłe. Jeśli chodzi o użycie pamięci, wskaźniki odgrywają główną rolę na liście Połączone, podobnie jak ich skuteczność.
W przypadku listy Array nawet pusta lista wymaga rozmiaru 10, ale w przypadku listy połączonej nie potrzebujemy tak dużej przestrzeni. Możemy utworzyć pustą połączoną listę o rozmiarze 0. Później możemy w razie potrzeby zwiększyć rozmiar.
Pobieranie danych jest prostsze na liście Array, ponieważ przechowuje je sekwencyjnie. Wszystko, co robi, to identyfikacja pierwszej lokalizacji danych; stamtąd następna lokalizacja jest dostępna sekwencyjnie, aby pobrać resztę. Oblicza się tak, jak pierwsza pozycja danych + „n”, gdzie „n” to kolejność danych na liście Array. Lista Połączone odnosi się do początkowego wskaźnika do znalezienia pierwszej lokalizacji danych, a stamtąd do wskaźnika związanego z każdym danymi, aby znaleźć następną lokalizację danych. Proces wyszukiwania zależy głównie od wskaźników tutaj i skutecznie pokazują nam kolejną lokalizację danych.
Lista Array używa wartości null do oznaczenia końca danych, podczas gdy lista Linked używa do tego celu wskaźnika pustego. Jak tylko system rozpozna puste dane, lista Array zatrzymuje następne pobieranie danych. W podobny sposób wskaźnik zerowy zatrzymuje system przed przejściem do następnego pobierania danych.
Lista połączona umożliwia nam przechodzenie w odwrotnych kierunkach za pomocą descendingiterator (). Jednak nie mamy takiej możliwości na liście Array - tu problemem staje się odwrotne przechodzenie.
Przyjrzyjmy się składni Java obu mechanizmów przechowywania.
Tworzenie listy tablic:
Lista arraylistsample = new ArrayList ();
Dodawanie obiektów do Array List:
Arraylistsample.add („nazwa1”);
Arraylistsample.add („nazwa2”);
Tak będzie wyglądać wynikowa lista Array - [nazwa1, nazwa2].
Tworzenie listy połączonej:
Wyświetl listę linkedlistsample = new linkedList ();
Dodawanie obiektów do listy połączonej:
Linkedlistsample.add („nazwa3”);
Linkedlistsample.add („nazwa4”);
Tak będzie wyglądać wynikowa lista połączona - [nazwa3, nazwa4].
Lista Array zajmuje O (1) czasu do biegać dowolne wyszukiwanie danych, podczas gdy lista Linked przyjmuje u O (n) jako nthwyszukiwanie danych. Dlatego lista tablic zawsze używa stałego czasu do wyszukiwania danych, ale w przypadku listy połączonych czas ten zależy od pozycji danych. Dlatego listy tablicowe są zawsze lepszym wyborem dla operacji pobierania lub wyszukiwania.
Dodanie danych zarówno do listy Array, jak i Linked List zajmuje O (1) czasu. Ale jeśli tablica jest pełna, zmiana rozmiaru listy Array i skopiowanie elementów do nowszej zajmie dużo czasu. W takim przypadku lepszym wyborem jest lista połączona.
Operacja usuwania zajmuje prawie tyle samo czasu zarówno na liście Array, jak i na liście Linked. Na liście Array ta operacja usuwa dane, a następnie przesuwa dane w celu utworzenia nowszej tablicy - zajmuje to O (n) czasu. Na liście Połączone ta operacja przechodzi do określonych danych i zmienia pozycje wskaźnika, aby utworzyć nowszą listę. Czas na przemierzanie i usuwanie również tutaj wynosi O (n).
Wiemy, że lista Array wykorzystuje wewnętrzną tablicę do przechowywania rzeczywistych danych. Dlatego też, jeśli jakiekolwiek dane zostaną usunięte, wszystkie nadchodzące dane wymagają przesunięcia pamięci. Oczywiście wymaga to znacznej ilości czasu i spowalnia wszystko. Takie przesunięcie pamięci nie jest wymagane na liście Połączone, ponieważ wszystko, co robi, to zmiana położenia wskaźnika. Dlatego lista połączona jest szybsza niż lista tablic w jakimkolwiek rodzaju przechowywania danych. Zależy to jednak wyłącznie od rodzaju operacji, tj. W przypadku operacji Get lub Search lista Linked zajmuje dużo więcej czasu niż lista Array. Kiedy spojrzymy na ogólną wydajność, możemy powiedzieć, że lista połączona jest szybsza.
Lista tablic najlepiej nadaje się do mniejszych wymagań dotyczących danych, w których dostępna jest pamięć ciągła. Ale gdy mamy do czynienia z ogromnymi ilościami danych, dostępność pamięci ciągłej implementuje mechanizmy przechowywania danych, niezależnie od tego, czy są one małe, czy ogromne. Następnie zdecyduj, który z nich wybrać - listę Array lub listę Linked. Możesz przejść dalej z listą tablic, gdy potrzebujesz tylko przechowywania i pobierania danych. Ale lista może pomóc ci poza tym, manipulując danymi. Gdy już zdecydujesz, jak często wymagana jest manipulacja danymi, ważne jest, aby sprawdzić, jakiego typu pobieranie danych jest zwykle wykonywane. Kiedy jest po prostu Get lub Search, wtedy lista tablic jest lepszym wyborem; w przypadku innych operacji, takich jak wstawianie lub usuwanie, przejdź do listy połączonych.
Spójrzmy na różnice w formie tabelarycznej.
S.Nr | Koncepcje | Różnice | |
Lista tablic | Połączona lista | ||
1 | Moda na przechowywanie danych | Wykorzystuje sekwencyjne przechowywanie danych | Używa niesekwencyjnego przechowywania danych |
2 | Schemat pamięci wewnętrznej | Utrzymuje wewnętrzną tablicę dynamiczną | Utrzymuje listę połączoną |
3 | Zużycie pamięci | Wymaga miejsca w pamięci tylko na dane | Wymaga miejsca w pamięci na dane, a także na wskaźniki |
4 | Rozmiar listy początkowej | Potrzebuje miejsca na co najmniej 10 przedmiotów | Nie potrzebuje miejsca, a nawet możemy utworzyć pustą połączoną listę o rozmiarze 0. |
5 | Odzyskiwanie danych | Oblicza podobnie jak pierwsza pozycja danych + „n”, gdzie „n” to kolejność danych na liście Array | Przejście od pierwszego lub ostatniego do wymaganych danych |
6 | Koniec danych | Wartości Null oznaczają koniec | Wskaźnik zerowy oznacza koniec |
7 | Reverse Traversal | Nie pozwala na to | Pozwala na to za pomocą descendingiterator () |
8 | Składnia tworzenia listy | Lista arraylistsample = new ArrayList ();
| Wyświetl listę linkedlistsample = new linkedList ();
|
9 | Dodawanie obiektów | Arraylistsample.add („nazwa1”);
| Linkedlistsample.add („nazwa3”);
|
10 | Pobierz lub wyszukaj | Zajmuje O (1) czasu i ma lepszą wydajność | Zajmuje O (n) czasu, a wydajność zależy od pozycji danych |
jedenaście | Wstaw lub dodawanie | Zużywa czas O (1), z wyjątkiem sytuacji, gdy tablica jest pełna | Zużywa O (1) czas w każdych okolicznościach |
12 | Usunięcie lub usunięcie | Zajmuje O (n) czasu | Zajmuje O (n) czasu |
13 | Kiedy użyć? | Gdy zaangażowanych jest wiele operacji pobierania lub wyszukiwania; dostępność pamięci powinna być wyższa nawet na początku | Gdy istnieje wiele operacji wstawiania lub usuwania, a dostępność pamięci nie musi być ciągła |
Copyright © Wszelkie Prawa Zastrzeżone | asayamind.com