Deque-Gegevensstructuur in Java
Dubbelzijdige wachtrij
Deque, of dubbelzijdige wachtrij, maakt het mogelijk om met wachtrijen te werken vanaf zowel de voor- als de achterkant.
De Deque-interface breidt de Queue-interface uit, waardoor een klasse zoals LinkedList deze interface ook implementeert.
Daarom gebruik je opnieuw LinkedList, maar ditmaal met een nieuwe interface.
Het declareren van een object met het Deque-type verschilt niet van Queue:
Main.java
1Deque<T> deque = new LinkedList<>();
Het belangrijkste verschil komt naar voren wanneer we kijken naar de methoden van deze interface.
Aangezien een Deque een dubbelzijdige wachtrij is, wat betekent dat je met elementen aan zowel de voorkant als de achterkant van de wachtrij kunt werken, zijn de methoden aangepast aan deze eigenschap.
Methoden
Enkele belangrijke methoden van de Deque-interface zijn:
addFirst(element): voegt een element toe aan het begin van de deque;addLast(element): voegt een element toe aan het einde van de deque.
Het is duidelijk dat er in een deque methoden zijn voor het toevoegen aan het begin en het einde. De namen van deze methoden zijn zelfverklarend. Laten we deze methoden in code bekijken:
Main.java
123456789101112131415package com.example; import java.util.Deque; import java.util.LinkedList; public class Main { public static void main(String[] args) { Deque<String> deque = new LinkedList<>(); deque.addFirst("One"); deque.addLast("Two"); System.out.println("Deque: " + deque); deque.addFirst("Zero"); System.out.println("Deque after the `addFirst()` method: " + deque); } }
Zoals je kunt zien, werd na het gebruik van de methode addFirst() het element toegevoegd aan het begin van de deque. Dit onderscheidt deze methode van de addLast() methode.
Deque heeft ook een reguliere add() methode, die hetzelfde werkt als de addLast() methode. De keuze welke methode te gebruiken is dus volledig aan jou.
Verwijderingsmethoden
Als er methoden zijn om elementen toe te voegen aan het begin en het einde, dan moeten er ook methoden zijn om te verwijderen van het begin en het einde van de deque.
removeFirst(): verwijdert en retourneert het element van het begin van de deque;removeLast(): verwijdert en retourneert het element van het einde van de deque.
De methoden addFirst() en addLast() voeren de verwijdering van elementen uit aan het begin en het einde van de deque.
Bekijk het volgende voorbeeld van gebruik in de code:
Main.java
1234567891011121314151617package com.example; import java.util.Deque; import java.util.LinkedList; public class Main { public static void main(String[] args) { Deque<String> deque = new LinkedList<>(); deque.add("One"); deque.add("Second"); deque.add("Third"); System.out.println("Deque: " + deque); deque.removeFirst(); deque.removeLast(); System.out.println("Deque after the removal methods method: " + deque); } }
Zoals te zien is, zijn de eerste en laatste elementen verwijderd uit de deque, waardoor alleen het tweede element overblijft.
Het is eenvoudig en handig, en de methodenamen spreken voor zich.
Ophalende methoden
Vervolgens gaan we verder met de methoden voor het benaderen van elementen in een deque.
getFirst(): haalt het element aan de voorzijde van de deque op, maar verwijdert het niet;getLast(): haalt het element aan het einde van de deque op, maar verwijdert het niet.
Hiermee kunnen we de eerste en laatste elementen in een dubbelzijdige wachtrij benaderen.
Laten we nu een voorbeeld in code bekijken:
Main.java
123456789101112131415161718package com.example; import java.util.Deque; import java.util.LinkedList; public class Main { public static void main(String[] args) { Deque<String> deque = new LinkedList<>(); deque.add("One"); deque.add("Second"); deque.add("Third"); System.out.println("Deque: " + deque); String first = deque.getFirst(); String last = deque.getLast(); System.out.println("The first element in the deque: " + first); System.out.println("The last element in the deque: " + last); } }
Met behulp van de methoden getFirst() en getLast() zijn het eerste en laatste element uit de deque opgehaald en toegekend aan nieuw aangemaakte variabelen.
In de Deque-interface zijn er ook de methoden peekFirst() en peekLast(), die het probleem van het gooien van een uitzondering aanpakken. In plaats van een uitzondering te gooien en het programma te stoppen, retourneren ze null als de queue leeg is.
Bekijk het volgende voorbeeld:
Main.java
123456789101112131415package com.example; import java.util.Deque; import java.util.LinkedList; public class Main { public static void main(String[] args) { Deque<String> deque = new LinkedList<>(); System.out.println("Deque: " + deque); String first = deque.peekFirst(); System.out.println("The first element in the deque: " + first); String last = deque.getLast(); System.out.println("The last element in the deque: " + last); } }
Uit dit voorbeeld blijkt duidelijk dat het veel beter is om de methoden peekFirst() en peekLast() te gebruiken in plaats van getFirst() en getLast(), omdat ze het programma niet stoppen bij een fout.
Vergeet echter niet de NullPointerException! Deze uitzondering kan veel problemen veroorzaken in uw programma.
Er zijn ook gelijkwaardige alternatieve methoden voor de methoden addFirst(), addLast(), removeFirst() en removeLast(). We zullen hier niet lang bij stilstaan, aangezien je al begrijpt hoe deze methoden werken, maar hier is de lijst:
Alternatieve Methoden
Methoden voor het toevoegen van een element aan de deque:
offerFirst(E e): voegt een element aan het begin van de deque toe, indien mogelijk, en retourneerttrue. Retourneertfalseals toevoegen niet mogelijk is;offerLast(E e): voegt een element aan het einde van de deque toe, indien mogelijk, en retourneerttrue. Retourneertfalseals toevoegen niet mogelijk is;push(E e): voegt een element toe aan het begin van de deque, vergelijkbaar metaddFirst(). Merk op datpush()ook een stack-methode is in deDeque-klasse.
Methoden voor het verwijderen van een element uit de deque:
pollFirst(): verwijdert en retourneert het eerste element van de deque. Retourneertnullals de deque leeg is;pollLast(): verwijdert en retourneert het laatste element van de deque. Retourneertnullals de deque leeg is;pop(): verwijdert en retourneert het eerste element van de deque, vergelijkbaar metremoveFirst().
De keuze hangt af van de vereisten van het programma. Je kunt altijd alles oplossen met een gewone array, maar dat zou behoorlijk uitdagend zijn en niet geoptimaliseerd. Daarom bestaan er zoveel verschillende datastructuren—om het schrijven van diverse programma's gemakkelijker te maken.
1. Waar staat "Deque" voor?
2. Welke interface in Java vertegenwoordigt een Deque?
3. Wat is het doel van de methode addFirst() in een Deque?
4. Welke methode wordt gebruikt om het laatste element van een Deque op te halen zonder het te verwijderen?
Bedankt voor je feedback!
Vraag AI
Vraag AI
Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.
Geweldig!
Completion tarief verbeterd naar 4
Deque-Gegevensstructuur in Java
Veeg om het menu te tonen
Dubbelzijdige wachtrij
Deque, of dubbelzijdige wachtrij, maakt het mogelijk om met wachtrijen te werken vanaf zowel de voor- als de achterkant.
De Deque-interface breidt de Queue-interface uit, waardoor een klasse zoals LinkedList deze interface ook implementeert.
Daarom gebruik je opnieuw LinkedList, maar ditmaal met een nieuwe interface.
Het declareren van een object met het Deque-type verschilt niet van Queue:
Main.java
1Deque<T> deque = new LinkedList<>();
Het belangrijkste verschil komt naar voren wanneer we kijken naar de methoden van deze interface.
Aangezien een Deque een dubbelzijdige wachtrij is, wat betekent dat je met elementen aan zowel de voorkant als de achterkant van de wachtrij kunt werken, zijn de methoden aangepast aan deze eigenschap.
Methoden
Enkele belangrijke methoden van de Deque-interface zijn:
addFirst(element): voegt een element toe aan het begin van de deque;addLast(element): voegt een element toe aan het einde van de deque.
Het is duidelijk dat er in een deque methoden zijn voor het toevoegen aan het begin en het einde. De namen van deze methoden zijn zelfverklarend. Laten we deze methoden in code bekijken:
Main.java
123456789101112131415package com.example; import java.util.Deque; import java.util.LinkedList; public class Main { public static void main(String[] args) { Deque<String> deque = new LinkedList<>(); deque.addFirst("One"); deque.addLast("Two"); System.out.println("Deque: " + deque); deque.addFirst("Zero"); System.out.println("Deque after the `addFirst()` method: " + deque); } }
Zoals je kunt zien, werd na het gebruik van de methode addFirst() het element toegevoegd aan het begin van de deque. Dit onderscheidt deze methode van de addLast() methode.
Deque heeft ook een reguliere add() methode, die hetzelfde werkt als de addLast() methode. De keuze welke methode te gebruiken is dus volledig aan jou.
Verwijderingsmethoden
Als er methoden zijn om elementen toe te voegen aan het begin en het einde, dan moeten er ook methoden zijn om te verwijderen van het begin en het einde van de deque.
removeFirst(): verwijdert en retourneert het element van het begin van de deque;removeLast(): verwijdert en retourneert het element van het einde van de deque.
De methoden addFirst() en addLast() voeren de verwijdering van elementen uit aan het begin en het einde van de deque.
Bekijk het volgende voorbeeld van gebruik in de code:
Main.java
1234567891011121314151617package com.example; import java.util.Deque; import java.util.LinkedList; public class Main { public static void main(String[] args) { Deque<String> deque = new LinkedList<>(); deque.add("One"); deque.add("Second"); deque.add("Third"); System.out.println("Deque: " + deque); deque.removeFirst(); deque.removeLast(); System.out.println("Deque after the removal methods method: " + deque); } }
Zoals te zien is, zijn de eerste en laatste elementen verwijderd uit de deque, waardoor alleen het tweede element overblijft.
Het is eenvoudig en handig, en de methodenamen spreken voor zich.
Ophalende methoden
Vervolgens gaan we verder met de methoden voor het benaderen van elementen in een deque.
getFirst(): haalt het element aan de voorzijde van de deque op, maar verwijdert het niet;getLast(): haalt het element aan het einde van de deque op, maar verwijdert het niet.
Hiermee kunnen we de eerste en laatste elementen in een dubbelzijdige wachtrij benaderen.
Laten we nu een voorbeeld in code bekijken:
Main.java
123456789101112131415161718package com.example; import java.util.Deque; import java.util.LinkedList; public class Main { public static void main(String[] args) { Deque<String> deque = new LinkedList<>(); deque.add("One"); deque.add("Second"); deque.add("Third"); System.out.println("Deque: " + deque); String first = deque.getFirst(); String last = deque.getLast(); System.out.println("The first element in the deque: " + first); System.out.println("The last element in the deque: " + last); } }
Met behulp van de methoden getFirst() en getLast() zijn het eerste en laatste element uit de deque opgehaald en toegekend aan nieuw aangemaakte variabelen.
In de Deque-interface zijn er ook de methoden peekFirst() en peekLast(), die het probleem van het gooien van een uitzondering aanpakken. In plaats van een uitzondering te gooien en het programma te stoppen, retourneren ze null als de queue leeg is.
Bekijk het volgende voorbeeld:
Main.java
123456789101112131415package com.example; import java.util.Deque; import java.util.LinkedList; public class Main { public static void main(String[] args) { Deque<String> deque = new LinkedList<>(); System.out.println("Deque: " + deque); String first = deque.peekFirst(); System.out.println("The first element in the deque: " + first); String last = deque.getLast(); System.out.println("The last element in the deque: " + last); } }
Uit dit voorbeeld blijkt duidelijk dat het veel beter is om de methoden peekFirst() en peekLast() te gebruiken in plaats van getFirst() en getLast(), omdat ze het programma niet stoppen bij een fout.
Vergeet echter niet de NullPointerException! Deze uitzondering kan veel problemen veroorzaken in uw programma.
Er zijn ook gelijkwaardige alternatieve methoden voor de methoden addFirst(), addLast(), removeFirst() en removeLast(). We zullen hier niet lang bij stilstaan, aangezien je al begrijpt hoe deze methoden werken, maar hier is de lijst:
Alternatieve Methoden
Methoden voor het toevoegen van een element aan de deque:
offerFirst(E e): voegt een element aan het begin van de deque toe, indien mogelijk, en retourneerttrue. Retourneertfalseals toevoegen niet mogelijk is;offerLast(E e): voegt een element aan het einde van de deque toe, indien mogelijk, en retourneerttrue. Retourneertfalseals toevoegen niet mogelijk is;push(E e): voegt een element toe aan het begin van de deque, vergelijkbaar metaddFirst(). Merk op datpush()ook een stack-methode is in deDeque-klasse.
Methoden voor het verwijderen van een element uit de deque:
pollFirst(): verwijdert en retourneert het eerste element van de deque. Retourneertnullals de deque leeg is;pollLast(): verwijdert en retourneert het laatste element van de deque. Retourneertnullals de deque leeg is;pop(): verwijdert en retourneert het eerste element van de deque, vergelijkbaar metremoveFirst().
De keuze hangt af van de vereisten van het programma. Je kunt altijd alles oplossen met een gewone array, maar dat zou behoorlijk uitdagend zijn en niet geoptimaliseerd. Daarom bestaan er zoveel verschillende datastructuren—om het schrijven van diverse programma's gemakkelijker te maken.
1. Waar staat "Deque" voor?
2. Welke interface in Java vertegenwoordigt een Deque?
3. Wat is het doel van de methode addFirst() in een Deque?
4. Welke methode wordt gebruikt om het laatste element van een Deque op te halen zonder het te verwijderen?
Bedankt voor je feedback!