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 ArrayDeque beheersen: Uitgebreide handleiding & Stack-implementatie

Java ArrayDeque

Deze handleiding legt de ArrayDeque-klasse uit, de methoden en praktische voorbeelden – inclusief hoe je het als stack gebruikt.

In Java implementeert ArrayDeque wachtrij- en deque-datastructuren ondersteund door een vergrootbaar array.


Interfaces geïmplementeerd door ArrayDeque

De ArrayDeque-klasse implementeert de volgende interfaces:

  • Java Queue Interface
  • Java Deque Interface

Java ArrayDeque beheersen: Uitgebreide handleiding & Stack-implementatie


Een ArrayDeque aanmaken

Eerst het pakket importeren:

import java.util.ArrayDeque;

Instantieer een getypte deque:

ArrayDeque<Type> deque = new ArrayDeque<>();

Voorbeelden:

// String deque ArrayDeque<String> animals = new ArrayDeque<>(); // Integer deque ArrayDeque<Integer> ages = new ArrayDeque<>();

Belangrijkste ArrayDeque-methoden

Elementen invoegen

1. Met add(), addFirst(), addLast()

  • add(E e) – voegt e aan de tail toe.
  • addFirst(E e) – voegt e aan de head in.
  • addLast(E e) – equivalent aan add().

Let op: Als de deque vol is, gooien deze methoden IllegalStateException.

ArrayDeque<String> animals = new ArrayDeque<>(); animals.add("Dog"); animals.addFirst("Cat"); animals.addLast("Horse"); System.out.println("ArrayDeque: " + animals);

Output

ArrayDeque: [Cat, Dog, Horse]

2. Met offer(), offerFirst(), offerLast()

  • offer(E e) – voegt e aan de tail toe, retourneert true bij succes.
  • offerFirst(E e) – voegt e aan de head in.
  • offerLast(E e) – hetzelfde als offer().

Let op: Deze methoden retourneren false als de deque vol is.

ArrayDeque<String> animals = new ArrayDeque<>(); animals.offer("Dog"); animals.offerFirst("Cat"); animals.offerLast("Horse"); System.out.println("ArrayDeque: " + animals);

Output

ArrayDeque: [Cat, Dog, Horse]

Elementen benaderen

1. getFirst() en getLast()

  • getFirst() – retourneert het head-element.
  • getLast() – retourneert het tail-element.

Let op: Gooit NoSuchElementException als de deque leeg is.

ArrayDeque<String> animals = new ArrayDeque<>(); animals.add("Dog"); animals.add("Cat"); animals.add("Horse"); System.out.println("ArrayDeque: " + animals); System.out.println("Eerste element: " + animals.getFirst()); System.out.println("Laatste element: " + animals.getLast());

Output

ArrayDeque: [Dog, Cat, Horse] Eerste element: Dog Laatste element: Horse

2. peek(), peekFirst(), peekLast()

  • peek() – haalt op zonder te verwijderen de head.
  • peekFirst() – synoniem voor peek().
  • peekLast() – haalt de tail op.
ArrayDeque<String> animals = new ArrayDeque<>(); animals.add("Dog"); animals.add("Cat"); animals.add("Horse"); System.out.println("ArrayDeque: " + animals); System.out.println("Head-element: " + animals.peek()); System.out.println("Eerste element: " + animals.peekFirst()); System.out.println("Laatste element: " + animals.peekLast());

Output

ArrayDeque: [Dog, Cat, Horse] Head-element: Dog Eerste element: Dog Laatste element: Horse

Let op: Als de deque leeg is, retourneren peek() en verwanten null in plaats van te gooien.

Elementen verwijderen

1. remove(), removeFirst(), removeLast()

  • remove() – verwijdert en retourneert de head.
  • removeFirst() – hetzelfde als remove().
  • removeLast() – verwijdert en retourneert de tail.
  • remove(Object o) – verwijdert de eerste voorkomens van o indien aanwezig.

Let op: Gooit NoSuchElementException als de deque leeg is of als remove(o) o niet vindt.

ArrayDeque<String> animals = new ArrayDeque<>(); animals.add("Dog"); animals.add("Cat"); animals.add("Cow"); animals.add("Horse"); System.out.println("ArrayDeque: " + animals); System.out.println("Verwijderd element: " + animals.remove()); System.out.println("Nieuwe ArrayDeque: " + animals); System.out.println("Verwijderd eerste element: " + animals.removeFirst()); System.out.println("Verwijderd laatste element: " + animals.removeLast());

Output

ArrayDeque: [Dog, Cat, Cow, Horse] Verwijderd element: Dog Nieuwe ArrayDeque: [Cat, Cow, Horse] Verwijderd eerste element: Cat Verwijderd laatste element: Horse

2. poll(), pollFirst(), pollLast()

  • poll() – verwijdert en retourneert de head, of null als leeg.
  • pollFirst() – synoniem voor poll().
  • pollLast() – verwijdert en retourneert de tail.
ArrayDeque<String> animals = new ArrayDeque<>(); animals.add("Dog"); animals.add("Cat"); animals.add("Cow"); animals.add("Horse"); System.out.println("ArrayDeque: " + animals); System.out.println("Verwijderd element: " + animals.poll()); System.out.println("Nieuwe ArrayDeque: " + animals); System.out.println("Verwijderd eerste element: " + animals.pollFirst()); System.out.println("Verwijderd laatste element: " + animals.pollLast());

Output

ArrayDeque: [Dog, Cat, Cow, Horse] Verwijderd element: Dog Nieuwe ArrayDeque: [Cat, Cow, Horse] Verwijderd eerste element: Cat Verwijderd laatste element: Horse

3. clear()

Leegt de volledige deque.

ArrayDeque<String> animals = new ArrayDeque<>(); animals.add("Dog"); animals.add("Cat"); animals.add("Horse"); System.out.println("ArrayDeque: " + animals); animals.clear(); System.out.println("Nieuwe ArrayDeque: " + animals);

Output

ArrayDeque: [Dog, Cat, Horse] Nieuwe ArrayDeque: []

Itereren over een ArrayDeque

  • iterator() – forward iterator.
  • descendingIterator() – reverse iterator.
ArrayDeque<String> animals = new ArrayDeque<>(); animals.add("Dog"); animals.add("Cat"); animals.add("Horse"); System.out.print("ArrayDeque: "); Iterator<String> it = animals.iterator(); while(it.hasNext()) { System.out.print(it.next() + ", "); } System.out.print("\nArrayDeque in omgekeerde volgorde: "); Iterator<String> rev = animals.descendingIterator(); while(rev.hasNext()) { System.out.print(rev.next() + ", "); }

Output

ArrayDeque: [Dog, Cat, Horse] ArrayDeque in omgekeerde volgorde: [Horse, Cat, Dog]

Overige veelvoorkomende methoden

MethodeBeschrijving
element()Haalt op zonder te verwijderen de head.
contains(Object o)Controleert aanwezigheid van o; retourneert true als gevonden.
size()Aantal elementen in de deque.
toArray()Converteert de deque naar een array.
clone()Maakt een shallow copy van de deque.

ArrayDeque als Stack gebruiken

Voor LIFO-gedrag is ArrayDeque te verkiezen boven Stack vanwege betere prestaties en geen legacy-synchronisatie-overhead.

Stack-stijl methoden:

  • push(E e) – voegt aan de head toe.
  • peek() – haalt het top-element op zonder verwijdering.
  • pop() – verwijdert en retourneert het top-element.
ArrayDeque<String> stack = new ArrayDeque<>(); stack.push("Dog"); stack.push("Cat"); stack.push("Horse"); System.out.println("Stack: " + stack); System.out.println("Toegankelijk element: " + stack.peek()); System.out.println("Verwijderd element: " + stack.pop());

Output

Stack: [Horse, Cat, Dog] Toegankelijk element: Horse Verwijderd element: Horse

ArrayDeque vs LinkedList

Beide implementeren Deque, maar verschillen:

  • LinkedList staat null elementen toe; ArrayDeque niet.
  • LinkedList-nodes slaan pointers op, wat meer geheugen verbruikt.
  • Voor wachtrij/deque-workloads presteert ArrayDeque typisch beter dan LinkedList.

Java

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