Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> Java

Java LinkedList: Uitgebreide handleiding met voorbeelden

Java LinkedList

Ontdek hoe je Java's LinkedList kunt benutten voor efficiënte datamanipulatie, met praktische codevoorbeelden en best-practice inzichten.

De LinkedList-klasse in het Java Collections Framework implementeert een dubbel gelinkte lijst. Elk element, of node, bevat drie velden:

  • prev – referentie naar de voorgaande node (null voor het eerste element)
  • next – referentie naar de volgende node (null voor het laatste element)
  • data – de daadwerkelijke waarde opgeslagen in de node

Een Java LinkedList aanmaken

Instantieer een LinkedList met een specifiek elementtype:

LinkedList<Type> list = new LinkedList<>();

Voorbeelden:

// Integer lijst LinkedList<Integer> numbers = new LinkedList<>(); // String lijst LinkedList<String> words = new LinkedList<>();

Voorbeeld: LinkedList aanmaken in Java

import java.util.LinkedList; class Main { public static void main(String[] args){ LinkedList<String> animals = new LinkedList<>(); animals.add("Dog"); animals.add("Cat"); animals.add("Cow"); System.out.println("LinkedList: " + animals); } }

Output

LinkedList: [Dog, Cat, Cow]

Deze code demonstreert een basis LinkedList genaamd animals gevuld met drie elementen via add().


Hoe een Java LinkedList werkt

In tegenstelling tot arrays, zijn nodes in het geheugen verspreid en aan elkaar gelinkt. Het onderstaande diagram illustreert drie nodes en hun verbindingen.

Java LinkedList: Uitgebreide handleiding met voorbeelden
  • Dog – eerste node, prev = null, next = Cat
  • Cat – middelste node, prev = Dog, next = Cow
  • Cow – laatste node, prev = Cat, next = null

Voor diepere inzicht, zie het Linked List-artikel.


Belangrijkste LinkedList-methoden

Hieronder de meest gebruikte operaties:

  • Elementen toevoegen
  • Elementen benaderen
  • Elementen bijwerken
  • Elementen verwijderen

1. Elementen toevoegen

Gebruik add() om een node aan het einde toe te voegen, optioneel met een index:

import java.util.LinkedList; class Main { public static void main(String[] args){ LinkedList<String> animals = new LinkedList<>(); animals.add("Dog"); animals.add("Cat"); animals.add("Cow"); System.out.println("LinkedList: " + animals); animals.add(1, "Horse"); System.out.println("Bijgewerkte LinkedList: " + animals); } }

Output

LinkedList: [Dog, Cat, Cow] Bijgewerkte LinkedList: [Dog, Horse, Cat, Cow]

De tweede add() voegt "Horse" in op index 1, wat opvolgende elementen opschuift.


2. Elementen benaderen

Haal een item op index op met get():

import java.util.LinkedList; class Main { public static void main(String[] args){ LinkedList<String> languages = new LinkedList<>(); languages.add("Python"); languages.add("Java"); languages.add("JavaScript"); System.out.println("LinkedList: " + languages); String str = languages.get(1); System.out.print("Element op index 1: " + str); } }

Output

LinkedList: [Python, Java, JavaScript] Element op index 1: Java

Iteratie kan ook via iterator() of listIterator() voor geavanceerde traversal.


3. Elementen bijwerken

Vervang een element op een specifieke index met set():

import java.util.LinkedList; class Main { public static void main(String[] args){ LinkedList<String> languages = new LinkedList<>(); languages.add("Java"); languages.add("Python"); languages.add("JavaScript"); languages.add("Java"); System.out.println("LinkedList: " + languages); languages.set(3, "Kotlin"); System.out.println("Bijgewerkte LinkedList: " + languages); } }

Output

LinkedList: [Java, Python, JavaScript, Java] Bijgewerkte LinkedList: [Java, Python, JavaScript, Kotlin]

4. Elementen verwijderen

Verwijder een element op index met remove():

import java.util.LinkedList; class Main { public static void main(String[] args){ LinkedList<String> languages = new LinkedList<>(); languages.add("Java"); languages.add("Python"); languages.add("JavaScript"); languages.add("Kotlin"); System.out.println("LinkedList: " + languages); String removed = languages.remove(1); System.out.println("Verwijderd element: " + removed); System.out.println("Bijgewerkte LinkedList: " + languages); } }

Output

LinkedList: [Java, Python, JavaScript, Kotlin] Verwijderd element: Python Nieuwe LinkedList: [Java, JavaScript, Kotlin]

Overige nuttige methoden

MethodeBeschrijving
contains()Controleert of een waarde bestaat
indexOf()Eerste voorkomensindex
lastIndexOf()Laatste voorkomensindex
clear()Verwijdert alle elementen
iterator()Levert een Iterator

LinkedList als Queue en Deque

Omdat LinkedList Queue en Deque implementeert, ondersteunt het FIFO- en LIFO-operaties. Veelvoorkomende methoden:

MethodeBeschrijving
addFirst()Toevoegen aan head
addLast()Toevoegen aan tail
getFirst()Bekijken head
getLast()Bekijken tail
removeFirst()Pop head
removeLast()Pop tail
peek()Bekijken head zonder verwijdering
poll()Ophalen & verwijderen head
offer()Enqueue aan tail

Voorbeeld: LinkedList als Queue

import java.util.LinkedList; import java.util.Queue; class Main { public static void main(String[] args){ Queue<String> languages = new LinkedList<>(); languages.add("Python"); languages.add("Java"); languages.add("C"); System.out.println("LinkedList: " + languages); String first = languages.peek(); System.out.println("Toegankelijk element: " + first); String removed = languages.poll(); System.out.println("Verwijderd element: " + removed); System.out.println("LinkedList na poll(): " + languages); languages.offer("Swift"); System.out.println("LinkedList na offer(): " + languages); } }

Output

LinkedList: [Python, Java, C] Toegankelijk element: Python Verwijderd element: Python LinkedList na poll(): [Java, C] LinkedList na offer(): [Java, C, Swift]

Voorbeeld: LinkedList als Deque

import java.util.LinkedList; import java.util.Deque; class Main { public static void main(String[] args){ Deque<String> animals = new LinkedList<>(); animals.add("Cow"); System.out.println("LinkedList: " + animals); animals.addFirst("Dog"); System.out.println("LinkedList na addFirst(): " + animals); animals.addLast("Zebra"); System.out.println("LinkedList na addLast(): " + animals); animals.removeFirst(); System.out.println("LinkedList na removeFirst(): " + animals); animals.removeLast(); System.out.println("LinkedList na removeLast(): " + animals); } }

Output

LinkedList: [Cow] LinkedList na addFirst(): [Dog, Cow] LinkedList na addLast(): [Dog, Cow, Zebra] LinkedList na removeFirst(): [Cow, Zebra] LinkedList na removeLast(): [Cow]

Itereren door een LinkedList

De enhanced for-loop biedt een beknopte manier om elementen te doorlopen:

import java.util.LinkedList; class Main { public static void main(String[] args){ LinkedList<String> animals = new LinkedList<>(); animals.add("Cow"); animals.add("Cat"); animals.add("Dog"); System.out.println("LinkedList: " + animals); System.out.println("LinkedList-elementen benaderen:"); for(String animal: animals){ System.out.print(animal + ", "); } } }

Output

LinkedList: [Cow, Cat, Dog] LinkedList-elementen benaderen: Cow, Cat, Dog,

LinkedList vs. ArrayList

Beide klassen implementeren List, maar verschillen in prestatiekenmerken:

LinkedListArrayList
Implementeert List, Queue, DequeImplementeert List
Node slaat prev, data, next opEnkel element per array-slot
Dubbel gelinkte structuurVergrootbaar array
Invoeging/verwijdering O(1) wanneer positie bekendInvoeging na index vereist schuiven O(n)
Willekeurige toegang vereist traversal O(n)Directe indextoegang O(1)

Let op: Je kunt een LinkedList instantiëren via elke interface:

// via List List<String> animals1 = new LinkedList<>(); // via Queue Queue<String> animals2 = new LinkedList<>(); // via Deque Deque<String> animals3 = new LinkedList<>();

Bij gebruik van een interface-referentie zijn alleen de methoden gedefinieerd door die interface beschikbaar.


Java

  1. Java-operators beheersen: typen, syntax en praktische voorbeelden
  2. Java-commentaar: typen, gebruik en best practices
  3. Java Enhanced For-lus beheersen: syntax, voorbeelden en best practices
  4. Java Strings beheersen: aanmaken, methodes en best practices
  5. Java interfaces meesteren: concepten, implementatie en best practices
  6. Java anonieme inner classes meesteren: definitie, syntax en praktische voorbeelden
  7. Java Try-with-resources meesteren: automatische resource management uitgelegd
  8. Java Annotaties uitgelegd: typen, plaatsing en praktische voorbeelden
  9. Java Assertions: een praktische gids voor bugdetectie en codebetrouwbaarheid
  10. Java Vector begrijpen: Gebruik, Kenmerken en Vergelijking met ArrayList
  11. Java 8: Uitgebreide Quick Reference Gids