Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Deque-datastruktur i Java | Avanserte Datastrukturer i Java
Practice
Projects
Quizzes & Challenges
Quizzes
Challenges
/
Java Datastrukturer

bookDeque-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

Main.java

copy
1
Deque<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

Main.java

copy
123456789101112131415
package 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

Main.java

copy
1234567891011121314151617
package 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

Main.java

copy
123456789101112131415161718
package 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

Main.java

copy
123456789101112131415
package 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 returnerer true. Returnerer false hvis det ikke er mulig å legge til;
  • offerLast(E e): legger til et element i slutten av deque, hvis mulig, og returnerer true. Returnerer false hvis det ikke er mulig å legge til;
  • push(E e): legger til et element i begynnelsen av deque, tilsvarende addFirst(). Merk at push() også er en stakk-metode i Deque-klassen.

Metoder for å fjerne et element fra deque:

  • pollFirst(): fjerner og returnerer det første elementet i deque. Returnerer null hvis deque er tom;
  • pollLast(): fjerner og returnerer det siste elementet i deque. Returnerer null hvis deque er tom;
  • pop(): fjerner og returnerer det første elementet i deque, tilsvarende removeFirst().

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?

question mark

Hva står "Deque" for?

Select the correct answer

question mark

Hvilket grensesnitt i Java representerer en Deque?

Select the correct answer

question mark

Hva er formålet med addFirst()-metoden i en Deque?

Select the correct answer

question mark

Hvilken metode brukes for å hente, men ikke fjerne, det siste elementet i en Deque?

Select the correct answer

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 2. Kapittel 2

Spør AI

expand

Spør AI

ChatGPT

Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår

Suggested prompts:

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?

bookDeque-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

Main.java

copy
1
Deque<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

Main.java

copy
123456789101112131415
package 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

Main.java

copy
1234567891011121314151617
package 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

Main.java

copy
123456789101112131415161718
package 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

Main.java

copy
123456789101112131415
package 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 returnerer true. Returnerer false hvis det ikke er mulig å legge til;
  • offerLast(E e): legger til et element i slutten av deque, hvis mulig, og returnerer true. Returnerer false hvis det ikke er mulig å legge til;
  • push(E e): legger til et element i begynnelsen av deque, tilsvarende addFirst(). Merk at push() også er en stakk-metode i Deque-klassen.

Metoder for å fjerne et element fra deque:

  • pollFirst(): fjerner og returnerer det første elementet i deque. Returnerer null hvis deque er tom;
  • pollLast(): fjerner og returnerer det siste elementet i deque. Returnerer null hvis deque er tom;
  • pop(): fjerner og returnerer det første elementet i deque, tilsvarende removeFirst().

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?

question mark

Hva står "Deque" for?

Select the correct answer

question mark

Hvilket grensesnitt i Java representerer en Deque?

Select the correct answer

question mark

Hva er formålet med addFirst()-metoden i en Deque?

Select the correct answer

question mark

Hvilken metode brukes for å hente, men ikke fjerne, det siste elementet i en Deque?

Select the correct answer

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 2. Kapittel 2
some-alt