ArrayList a LinkedList implementují rozhraní List a udržují pořadí vložení. Obě jsou nesynchronizované třídy.
java otevírání souboru
Existuje však mnoho rozdílů mezi třídami ArrayList a LinkedList, které jsou uvedeny níže.
ArrayList | Spojový seznam |
---|---|
1) ArrayList interně používá a dynamické pole k uložení prvků. | LinkedList interně používá a dvojitě propojený seznam k uložení prvků. |
2) Manipulace s ArrayList je pomalý protože interně používá pole. Pokud je některý prvek z pole odstraněn, všechny ostatní prvky se v paměti posunou. | Manipulace s LinkedList je rychlejší než ArrayList, protože používá dvojitě propojený seznam, takže v paměti není vyžadován žádný bitový posun. |
3) Třída ArrayList může fungovat jako seznam pouze proto, že implementuje pouze seznam. | Třída LinkedList může fungovat jako seznam a fronta protože implementuje rozhraní List a Deque. |
4) ArrayList je lepší pro ukládání a přístup data. | LinkedList je lepší pro manipulaci data. |
5) Umístění paměti pro prvky ArrayList je souvislé. | Umístění prvků propojeného seznamu není nakažlivé. |
6) Obecně, když je ArrayList inicializován, je ArrayList přiřazena výchozí kapacita 10. | V LinkedList neexistuje žádný případ výchozí kapacity. V LinkedList se při inicializaci LinkedList vytvoří prázdný seznam. |
7) Abychom byli přesní, ArrayList je pole s měnitelnou velikostí. | LinkedList implementuje dvojitě propojený seznam rozhraní seznamu. |
Příklad ArrayList a LinkedList v Javě
Podívejme se na jednoduchý příklad, kde používáme ArrayList i LinkedList.
Název souboru: 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); } }Otestujte to hned
Výstup:
arraylist: [Ravi,Vijay,Ravi,Ajay] linkedlist: [James,Serena,Swati,Junaid]
Body k zapamatování
Níže jsou uvedeny některé důležité body, které je třeba pamatovat ohledně ArrayList a LinkedList.
- Když je rychlost přidávání nebo odebírání vyšší než četné scénáře, přejděte na LinkedList. Na druhou stranu, když je frekvence čtení scénářů vyšší než rychlost přidávání nebo odstraňování, pak má ArrayList přednost před LinkedList.
- Protože prvky ArrayList jsou uloženy kompaktněji ve srovnání s LinkedList; proto je ArrayList ve srovnání s LinkedList šetrnější k mezipaměti. Šance na vynechání mezipaměti jsou tedy v ArrayList menší ve srovnání s LinkedList. Obecně se má za to, že LinkedList má špatnou mezipaměť.
- Režie paměti v LinkedList je větší ve srovnání s ArrayList. Je to proto, že v LinkedList máme dva další odkazy (následující a předchozí), protože je nutné uložit adresu předchozího a následujícího uzlu, a tyto odkazy zabírají místo navíc. Takové odkazy nejsou přítomny v ArrayList.