FIFO-gebaseerde wachtrij-implementaties?

Ik heb een eenvoudige, door FIFO geïmplementeerde wachtrij nodig voor het opslaan van een aantal ints (ik vind het niet erg als het een generieke implementatie is).

Is er al iets voor me gebakken in java.utilof Trove/Guava-bibliotheek?


Antwoord 1, autoriteit 100%

Ja. Wachtrij

LinkedListis het meest triviale concrete implementatie.


Antwoord 2, autoriteit 70%

Hier is een voorbeeldcode voor het gebruik van de ingebouwde FIFO-wachtrij van java:

public static void main(String[] args) {
    Queue<Integer> myQ = new LinkedList<Integer>();
    myQ.add(1);
    myQ.add(6);
    myQ.add(3);
    System.out.println(myQ);   // 1 6 3
    int first = myQ.poll();    // retrieve and remove the first element
    System.out.println(first); // 1
    System.out.println(myQ);   // 6 3
}

Antwoord 3, autoriteit 17%

ArrayDequeis waarschijnlijk de snelste objectgebaseerde wachtrij in de JDK; Trove heeft de TIntQueue-interface, maar ik weet niet waar de implementaties ervan leven.


Antwoord 4, autoriteit 7%

Queueis een interface die Collectionin Java uitbreidt. Het heeft alle functies die nodig zijn om de FIFO-architectuur te ondersteunen.

Voor concrete implementatie kunt u LinkedListgebruiken. LinkedList implementeert Dequedie op zijn beurt Queueimplementeert. Deze maken allemaal deel uit van het pakket java.util.

Voor details over de methode met voorbeeldvoorbeeld kunt u verwijzen naar FIFO-gebaseerde wachtrij-implementatie in Java.

PS: Bovenstaande link gaat naar mijn persoonlijke blog met aanvullende details hierover.


Antwoord 5, autoriteit 7%

Een LinkedListkan worden gebruikt als een wachtrij – maar je moet het goed gebruiken. Hier is een voorbeeldcode:

@Test
public void testQueue() {
    LinkedList<Integer> queue = new LinkedList<>();
    queue.add(1);
    queue.add(2);
    System.out.println(queue.pop());
    System.out.println(queue.pop());
}

Uitvoer:

1
2

Onthoud, als u duwenin plaats van toevoegen(wat u zeer waarschijnlijk intuïtief zult doen), dit zal een element vooraan de lijst toevoegen, waardoor het zich als een stapel gedraagt.

Dit is dus alleen een wachtrij als deze wordt gebruikt in combinatie met add.

Probeer dit:

@Test
public void testQueue() {
    LinkedList<Integer> queue = new LinkedList<>();
    queue.push(1);
    queue.push(2);
    System.out.println(queue.pop());
    System.out.println(queue.pop());
}

Uitvoer:

2
1

Other episodes