Deque-datastruktur i Java
Dobbeltsidig kø
Deque, eller dobbeltsidig kø, gjør det mulig å arbeide med køer fra både for- og baksiden.
Grensesnittet Deque utvider grensesnittet Queue, så en klasse som LinkedList implementerer også dette grensesnittet.
Derfor vil du igjen bruke LinkedList, men denne gangen med et nytt grensesnitt.
Deklarering av et objekt med typen Deque er ikke annerledes enn for Queue:
Main.java
1Deque<T> deque = new LinkedList<>();
Hovedforskjellen kommer til syne når vi ser på metodene til dette grensesnittet.
Siden en Deque er en dobbelt-endt kø, som betyr at du kan arbeide med elementer både i starten og slutten av køen, er metodene tilpasset denne egenskapen.
Metoder
Noen viktige metoder i Deque-grensesnittet er:
addFirst(element): legger til et element i starten av dequeen;addLast(element): legger til et element på slutten av dequeen.
Det er tydelig at en deque har metoder for å legge til i starten og slutten. Navnene på disse metodene er selvforklarende. La oss se på disse metodene i kode:
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); } }
Som du kan se, etter bruk av addFirst()-metoden, ble elementet lagt til begynnelsen av deque-en. Dette skiller den fra addLast()-metoden.
Deque har også en vanlig add()-metode, som fungerer på samme måte som addLast()-metoden. Valget av metode er derfor helt opp til deg.
Fjerningsmetoder
Hvis det finnes metoder for å legge til elementer i begynnelsen og slutten, bør det også finnes metoder for å fjerne fra begynnelsen og slutten av deque-en.
removeFirst(): fjerner og returnerer elementet fra begynnelsen av deque-en;removeLast(): fjerner og returnerer elementet fra slutten av deque-en.
Metodene addFirst() og addLast() utfører fjerning av elementer fra begynnelsen og slutten av deque-en.
La oss se på et eksempel på bruk i koden:
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); } }
Som du kan se, har vi fjernet det første og siste elementet fra deque-en, slik at kun det andre elementet står igjen.
Det er enkelt og praktisk, og metodenavnene forklarer seg selv.
Hentemetoder
La oss nå gå videre til metodene for å få tilgang til elementer i en deque.
getFirst(): henter, men fjerner ikke, elementet foran i deque-en;getLast(): henter, men fjerner ikke, elementet bak i deque-en.
Dette gjør det mulig å få tilgang til første og siste element i en dobbeltkø.
La oss nå se et eksempel i kode:
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); } }
Ved å bruke metodene getFirst() og getLast(), hentet vi det første og siste elementet fra dequeen og tilordnet dem til nylig opprettede variabler.
I Deque-grensesnittet finnes det også metodene peekFirst() og peekLast(), som løser problemet med å kaste et unntak. I stedet for å kaste et unntak og stoppe programmet, returnerer de null hvis køen er tom.
La oss se på et eksempel:
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); } }
Fra dette eksempelet ble det tydelig at det er mye bedre å bruke metodene peekFirst() og peekLast() i stedet for getFirst() og getLast(), siden de ikke vil stoppe programmet ved en feil.
Husk imidlertid på NullPointerException! Dette unntaket kan forårsake mange problemer i programmet ditt.
Det finnes også tilsvarende alternative metoder for metodene addFirst(), addLast(), removeFirst() og removeLast(). Vi vil ikke gå nærmere inn på dem, siden du allerede forstår hvordan disse metodene fungerer, men her er listen:
Alternative metoder
Metoder for å legge til et element i deque:
offerFirst(E e): legger til et element i begynnelsen av deque, hvis mulig, og returnerertrue. Returnererfalsehvis det ikke er mulig å legge til;offerLast(E e): legger til et element i slutten av deque, hvis mulig, og returnerertrue. Returnererfalsehvis det ikke er mulig å legge til;push(E e): legger til et element i begynnelsen av deque, tilsvarendeaddFirst(). Merk atpush()også er en stakk-metode iDeque-klassen.
Metoder for å fjerne et element fra deque:
pollFirst(): fjerner og returnerer det første elementet i deque. Returnerernullhvis deque er tom;pollLast(): fjerner og returnerer det siste elementet i deque. Returnerernullhvis deque er tom;pop(): fjerner og returnerer det første elementet i deque, tilsvarenderemoveFirst().
Valget avhenger av programmets krav. Du kan alltid løse alt med et vanlig array, men det ville vært ganske utfordrende, og det ville ikke vært optimalt. Det er derfor så mange ulike datastrukturer finnes—for å gjøre det mer praktisk å skrive forskjellige programmer.
1. Hva står "Deque" for?
2. Hvilket grensesnitt i Java representerer en Deque?
3. Hva er formålet med addFirst()-metoden i en Deque?
4. Hvilken metode brukes for å hente, men ikke fjerne, det siste elementet i en Deque?
Takk for tilbakemeldingene dine!
Spør AI
Spør AI
Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår
What are some real-world use cases for a Deque?
Can you explain the difference between a Deque and a regular Queue?
How do I choose between using addFirst/addLast and offerFirst/offerLast?
Fantastisk!
Completion rate forbedret til 4
Deque-datastruktur i Java
Sveip for å vise menyen
Dobbeltsidig kø
Deque, eller dobbeltsidig kø, gjør det mulig å arbeide med køer fra både for- og baksiden.
Grensesnittet Deque utvider grensesnittet Queue, så en klasse som LinkedList implementerer også dette grensesnittet.
Derfor vil du igjen bruke LinkedList, men denne gangen med et nytt grensesnitt.
Deklarering av et objekt med typen Deque er ikke annerledes enn for Queue:
Main.java
1Deque<T> deque = new LinkedList<>();
Hovedforskjellen kommer til syne når vi ser på metodene til dette grensesnittet.
Siden en Deque er en dobbelt-endt kø, som betyr at du kan arbeide med elementer både i starten og slutten av køen, er metodene tilpasset denne egenskapen.
Metoder
Noen viktige metoder i Deque-grensesnittet er:
addFirst(element): legger til et element i starten av dequeen;addLast(element): legger til et element på slutten av dequeen.
Det er tydelig at en deque har metoder for å legge til i starten og slutten. Navnene på disse metodene er selvforklarende. La oss se på disse metodene i kode:
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); } }
Som du kan se, etter bruk av addFirst()-metoden, ble elementet lagt til begynnelsen av deque-en. Dette skiller den fra addLast()-metoden.
Deque har også en vanlig add()-metode, som fungerer på samme måte som addLast()-metoden. Valget av metode er derfor helt opp til deg.
Fjerningsmetoder
Hvis det finnes metoder for å legge til elementer i begynnelsen og slutten, bør det også finnes metoder for å fjerne fra begynnelsen og slutten av deque-en.
removeFirst(): fjerner og returnerer elementet fra begynnelsen av deque-en;removeLast(): fjerner og returnerer elementet fra slutten av deque-en.
Metodene addFirst() og addLast() utfører fjerning av elementer fra begynnelsen og slutten av deque-en.
La oss se på et eksempel på bruk i koden:
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); } }
Som du kan se, har vi fjernet det første og siste elementet fra deque-en, slik at kun det andre elementet står igjen.
Det er enkelt og praktisk, og metodenavnene forklarer seg selv.
Hentemetoder
La oss nå gå videre til metodene for å få tilgang til elementer i en deque.
getFirst(): henter, men fjerner ikke, elementet foran i deque-en;getLast(): henter, men fjerner ikke, elementet bak i deque-en.
Dette gjør det mulig å få tilgang til første og siste element i en dobbeltkø.
La oss nå se et eksempel i kode:
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); } }
Ved å bruke metodene getFirst() og getLast(), hentet vi det første og siste elementet fra dequeen og tilordnet dem til nylig opprettede variabler.
I Deque-grensesnittet finnes det også metodene peekFirst() og peekLast(), som løser problemet med å kaste et unntak. I stedet for å kaste et unntak og stoppe programmet, returnerer de null hvis køen er tom.
La oss se på et eksempel:
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); } }
Fra dette eksempelet ble det tydelig at det er mye bedre å bruke metodene peekFirst() og peekLast() i stedet for getFirst() og getLast(), siden de ikke vil stoppe programmet ved en feil.
Husk imidlertid på NullPointerException! Dette unntaket kan forårsake mange problemer i programmet ditt.
Det finnes også tilsvarende alternative metoder for metodene addFirst(), addLast(), removeFirst() og removeLast(). Vi vil ikke gå nærmere inn på dem, siden du allerede forstår hvordan disse metodene fungerer, men her er listen:
Alternative metoder
Metoder for å legge til et element i deque:
offerFirst(E e): legger til et element i begynnelsen av deque, hvis mulig, og returnerertrue. Returnererfalsehvis det ikke er mulig å legge til;offerLast(E e): legger til et element i slutten av deque, hvis mulig, og returnerertrue. Returnererfalsehvis det ikke er mulig å legge til;push(E e): legger til et element i begynnelsen av deque, tilsvarendeaddFirst(). Merk atpush()også er en stakk-metode iDeque-klassen.
Metoder for å fjerne et element fra deque:
pollFirst(): fjerner og returnerer det første elementet i deque. Returnerernullhvis deque er tom;pollLast(): fjerner og returnerer det siste elementet i deque. Returnerernullhvis deque er tom;pop(): fjerner og returnerer det første elementet i deque, tilsvarenderemoveFirst().
Valget avhenger av programmets krav. Du kan alltid løse alt med et vanlig array, men det ville vært ganske utfordrende, og det ville ikke vært optimalt. Det er derfor så mange ulike datastrukturer finnes—for å gjøre det mer praktisk å skrive forskjellige programmer.
1. Hva står "Deque" for?
2. Hvilket grensesnitt i Java representerer en Deque?
3. Hva er formålet med addFirst()-metoden i en Deque?
4. Hvilken metode brukes for å hente, men ikke fjerne, det siste elementet i en Deque?
Takk for tilbakemeldingene dine!