ArrayList og LinkedList implementerer begge List-grænsefladen og opretholder indsættelsesrækkefølgen. Begge er ikke-synkroniserede klasser.
jsp javatpoint
Der er dog mange forskelle mellem ArrayList og LinkedList klasserne, der er angivet nedenfor.
ArrayList | LinkedList |
---|---|
1) ArrayList bruger internt en dynamisk array at opbevare elementerne. | LinkedList bruger internt en dobbelt linket liste at opbevare elementerne. |
2) Manipulation med ArrayList er langsom fordi den internt bruger et array. Hvis et element fjernes fra arrayet, flyttes alle de andre elementer i hukommelsen. | Manipulation med LinkedList er hurtigere end ArrayList, fordi den bruger en dobbelt linket liste, så der kræves ingen bitskift i hukommelsen. |
3) En ArrayList-klasse kan fungere som en liste kun fordi den kun implementerer List. | LinkedList-klassen kan fungere som en liste og kø både fordi den implementerer List- og Deque-grænseflader. |
4) ArrayList er bedre til opbevaring og adgang data. | LinkedList er bedre til at manipulere data. |
5) Hukommelsesplaceringen for elementerne i en ArrayList er sammenhængende. | Placeringen af elementerne i en sammenkædet liste er ikke smitsom. |
6) Generelt, når en ArrayList initialiseres, tildeles ArrayList en standardkapacitet på 10. | Der er ingen tilfælde af standardkapacitet i en LinkedList. I LinkedList oprettes en tom liste, når en LinkedList initialiseres. |
7) For at være præcis er en ArrayList et array, der kan ændres. | LinkedList implementerer den dobbelt lænkede liste over listegrænsefladen. |
Eksempel på ArrayList og LinkedList i Java
Lad os se et simpelt eksempel, hvor vi bruger både ArrayList og LinkedList.
Filnavn: TestArrayLinked.java
import java.util.*; class TestArrayLinked{ public static void main(String args[]){ List al=new ArrayList();//creating arraylist al.add('Ravi');//adding object in arraylist al.add('Vijay'); al.add('Ravi'); al.add('Ajay'); List al2=new LinkedList();//creating linkedlist al2.add('James');//adding object in linkedlist al2.add('Serena'); al2.add('Swati'); al2.add('Junaid'); System.out.println('arraylist: '+al); System.out.println('linkedlist: '+al2); } }Test det nu
Produktion:
arraylist: [Ravi,Vijay,Ravi,Ajay] linkedlist: [James,Serena,Swati,Junaid]
Punkter at huske
Følgende er nogle vigtige punkter at huske angående en ArrayList og LinkedList.
- Når hastigheden for tilføjelse eller fjernelse er højere end de læste scenarier, så gå efter LinkedList. På den anden side, når frekvensen af læsescenarierne er mere end tilføjelses- eller fjernelseshastigheden, så har ArrayList forrang over LinkedList.
- Da elementerne i en ArrayList er lagret mere kompakt sammenlignet med en LinkedList; derfor er ArrayList mere cache-venlig sammenlignet med LinkedList. Således er chancerne for cache-miss mindre i en ArrayList sammenlignet med en LinkedList. Generelt anses det for, at en LinkedList er dårlig i cache-lokalitet.
- Hukommelsesoverhead i LinkedList er mere sammenlignet med ArrayList. Det skyldes, at vi i en LinkedList har to ekstra links (næste og forrige), da det er nødvendigt for at gemme adressen på de forrige og de næste knudepunkter, og disse links optager ekstra plads. Sådanne links er ikke til stede i en ArrayList.