Array list och Linked List är vanliga termer när det gäller datalagring och hämtning. Även om det finns många lagringsenheter, beror de slutligen på lagringsmekanismen. Dessa två lagringsmekanismer placerar dina data i lagringsenheterna och hämtar dem vid behov. Låt oss ta en titt på hur de lagrar data i deras minne. Array-listan använder en sekventiell lagring, och datagrupperna lagras en efter en. Det här är kanske en enklare form av lagring - det undviker förvirring. Ja, vi kan hämta nästa objekt eller data från nästa minnesplats i matrislistan. Det lagras dock med hjälp av pekare på länken. Här behöver vi två minnesplatser för lagring - en för data, den andra för pekaren. En pekare adresserar minnesplatsen för nästa data. Vi kan lätt förstå att länklistan aldrig lagrar data i följd; snarare använder den en slumpmässig lagringsmekanism. Pointerna är de viktigaste elementen för att lokalisera datapunkterna i minnet.
Vi har redan diskuterat hur båda lagringsmekanismerna lägger in data och vi kan ge termen "dynamisk array" för Array-listens interna lagringsschema. Det sätter bara data bitar efter varandra - det vill säga namnet - medan den länkade listan använder en intern lista med hjälp av pekare för att spåra nästa objekt. Därför använder den en intern länkad lista, som en ensam eller dubbel länkad lista för att visa oss nästa data.
Eftersom Array-listan endast lagrar den faktiska data behöver vi bara plats för de data vi lagrar. Omvänt, i den länkade listan använder vi också pekare. Därför krävs två minnesplatser, och vi kan säga att länkad lista förbrukar mer minne än Array-listan. En fördelaktig sida av länkad lista är att det aldrig kräver kontinuerliga minnesplatser att lagra vår data, i motsats till Array-listan. Pekarna kan hålla positionen för nästa dataplacering, och vi kan till och med använda mindre minnesluckor som inte är kontinuerliga. När det gäller minnesanvändning spelar pekare huvudrollen i den länkade listan, och det gör också effektiviteten av dem.
Med listan Array behöver även en tom lista en storlek på 10, men med en länkad lista behöver vi inte ett så stort utrymme. Vi kan skapa en tom länkad lista med en storlek på 0. Senare kan vi öka storleken efter behov.
Datainsamling är enklare i Array-listan eftersom den lagras i följd. Allt det gör är att identifiera den första dataläget; därifrån kommer nästa plats åtkomst sekventiellt för att hämta resten. Den beräknar som den första datapositionen + 'n', där 'n' är ordningen för data i Array-listan. Den länkade listan hänvisar till den ursprungliga pekaren för att hitta den första dataläget, och därifrån hänvisar den pekaren som är associerad med varje data för att hitta nästa datalokation. Hämtningsprocessen är huvudsakligen beroende av pekarna här, och de visar oss på ett effektivt sätt nästa dataplacering.
Arraylistan använder ett nullvärde för att markera slutet på data, medan den länkade listan använder en nollpunktsgivare för detta ändamål. Så snart systemet känner igen nulldata, stoppar listan Array nästa datahämtning. På liknande sätt stoppar nollpunkten systemet från att fortsätta till nästa datahämtning.
Den länkade listan tillåter oss att korsa i omvänd riktning med hjälp av descendingiterator (). Vi har emellertid inte en sådan möjlighet i en array-lista - omvänd traversal blir ett problem här.
Låt oss titta på Java Syntax för båda lagringsmekanismerna.
Array list skapande:
Lista arraylistsample = new ArrayList ();
Lägga till objekt i arraylistan:
Arraylistsample.add ( ”namn1”);
Arraylistsample.add ( ”namn2”);
Så här kommer den resulterande Array-listan att se ut - [name1, name2].
Skapad länklista:
Lista linkedlistsample = new linkedList ();
Lägga till objekt i länklistan:
Linkedlistsample.add ( ”NAME3”);
Linkedlistsample.add ( ”NAME4”);
Så här kommer den resulterande länklistan att se ut - [namn3, namn4].
Arraylistan tar O (1) tid för att köra någon datasökning, medan den länkade listan tar dig O (n) för nth datasökning. Därför använder en Array-lista alltid en konstant tid för vilken datasökning som helst, men i den länkade listan beror tiden som är avhämtad av dataens position. Därför är Array-listor alltid ett bättre val för Get eller Search-operationer.
Både Array-listan och den länkade listan tar O (1) tid för datadillägg. Men om arrayen är full, tar Array-listan lång tid att ändra storlek och kopiera objekten till den nyare. I så fall är länklistan det bättre valet.
Avlägsningsoperationen tar nästan samma tid i både Array-listan och den länkade listan. I Array-listan raderar denna operation dataen och ändrar sedan positionen för data för att bilda den nyare gruppen - det tar O (n) tid. I den länkade listan går denna operation till den specifika data och ändrar pekarpositioner för att bilda den nyare listan. Tiden för traversen och borttagningen är O (n) här också.
Vi vet att en array-lista använder en intern array för att lagra den faktiska data. Därför, om någon data raderas, behöver alla kommande data ett minneskifte. Självklart kräver detta en avsevärd tid och sakta ner sakerna. Ett sådant minneskifte krävs inte i länklistan, eftersom allt det gör är att ändra pekarens plats. Därför är en länkad lista snabbare än en Array-lista i någon form av datalagring. Detta är emellertid endast beroende av typen av operation, dvs för Get or Search-operationen, tar den länkade listan mycket mer tid än en Array-lista. När vi tittar på övergripande prestanda kan vi säga att länklistan är snabbare.
En Array-lista passar bäst för mindre datakrav där kontinuerligt minne är tillgängligt. Men när vi hanterar enorma mängder data, utövar tillgängligheten av kontinuerligt minne datalagringsmekanismerna, oavsett om det är litet eller stort. Välj sedan vilken som ska väljas - Array-listan eller den länkade listan. Du kan gå vidare med en matrislista när du bara behöver lagra och hämta data. Men en lista kan hjälpa dig bortom det genom att manipulera data. När du väl bestämmer hur ofta datahantering krävs är det viktigt att kontrollera vilken typ av datahämtning du vanligtvis utför. När det bara är Få eller Sök, är Array List det bättre valet. För andra operationer, t.ex. Infoga eller Radera, fortsätt med den länkade listan.
Låt oss titta på skillnaderna i tabellform.
S.No | begrepp | skillnader | |
Array List | Länkad lista | ||
1 | Data Lagring Mode | Använder sekventiell datalagring | Använder icke-sekventiell datalagring |
2 | Internt lagringssystem | Innehåller en intern dynamisk array | Håller en länkad lista |
3 | Minnesanvändning | Kräver minnesutrymme bara för data | Kräver också minnesutrymme för data för pekare |
4 | Storleken på den ursprungliga listan | Behöver plats för minst 10 objekt | Behöver inte utrymme och vi kan till och med skapa en tom länkad lista över storlek 0. |
5 | Datainsamling | Beräknar som den första datapositionen + 'n', där 'n' är ordningen för data i Array-listan | Förflyttning från första eller sista till den önskade data krävs |
6 | Slut på data | Null-värdena markerar slutet | Null Pointer markerar slutet |
7 | Omvänd traversal | Tillåt det inte | Tillåter det med hjälp av descendingiterator () |
8 | Syntax för lista skapande | Lista arraylistsample = new ArrayList ();
| Lista linkedlistsample = new linkedList ();
|
9 | Lägga till objekt | Arraylistsample.add ( ”namn1”);
| Linkedlistsample.add ( ”NAME3”);
|
10 | Få eller sök | Tar O (1) tid och är bättre i prestanda | Tar O (n) tid och prestanda är beroende av dataens position |
11 | Infoga eller lägga till | Använder O (1) tid förutom när matrisen är full | Konsumerar O (1) tid under alla omständigheter |
12 | Radering eller borttagning | Tar O (n) tid | Tar O (n) tid |
13 | När ska du använda? | När det finns många Få eller Sök operationer involverade; Minnes tillgängligheten bör vara högre även i början | När det finns många Inlägg eller Ta bort operationer, och minnetillgängligheten inte behöver vara kontinuerlig |