Dans J2SE6, la classe ArrayDeque a été introduite, qui hérite de l'interface DEQU (file d'attente bidirectionnelle). En utilisant cette classe, vous pouvez implémenter les fonctions de la classe java.util.stack par vous-même et supprimer la fonction de synchronisation multi-thread de java.util.stack.
Par exemple, créez une pile qui stocke le type entier, créez simplement une variable de la classe ArrayDeque en tant que propriété dans la classe, puis définissez-la comme une pile et entrez la pile, et observez les éléments en haut de la pile, et utilisez directement la variable d'instance de l'arraydeque.
import java.util.arraydequ; Importer java.util.dequ; classe publique Integerstack {private deque <Integer> data = new ArrayDequ <nteger> (); public void push (élément entier) {data.addFirst (élément); } public entier pop () {return data.removeFirst (); } public Integer Powek () {return data.PeekFirst (); } public String toString () {return data.toString (); } public static void main (String [] args) {Integerstack stack = new Integerstack (); pour (int i = 0; i <5; i ++) {stack.push (i); } System.out.println (pile); System.out.println ("Après avoir poussé 5 éléments:" + pile); int m = stack.pop (); System.out.println ("Popped Element =" + M); System.out.println ("Après avoir éclaté 1 élément:" + pile); int n = stack.Peek (); System.out.println ("Elements PEEKED =" + n); System.out.println ("Après avoir piétiné 1 élément:" + pile); }} Code source de java.util.arraydeque:
Éléments privés transitoires e []; Head transitoire privé; Tail Int transitoire privé; / * L'emplacement où E est stocké ici est stocké à partir de la dernière position du tableau des éléments * / public void addFirst (e e) {if (e == null) lancez new nullpointerexception (); Elements [Head = (Head - 1) & (Elements.Length - 1)] = E; // La valeur par défaut pour la première capacité de tableau est 16, Head = (0-1) & (16-1) = 15 if (Head == Tail) DoubleCapacity (); } / * Chaque fois que la capacité est étendue, elle est remise dans un nouveau tableau dans l'ordre d'insertion, et le dernier inséré est placé à la première position du tableau. * / private void DoubleCapacity () {assert head == tail; int p = tête; int n = elements.length; int r = n - p; // Nombre d'éléments à droite de p int newcapacity = n << 1; if (newcapacity <0) jetez une nouvelle illégalstateException ("désolé, deque trop grand"); Objet [] a = nouvel objet [newCapacity]; System.ArrayCopy (Elements, P, A, 0, R); System.ArrayCopy (éléments, 0, A, R, P); éléments = (e []) a; tête = 0; tail = n; } public e dis doamFirst () {e x = pollFirst (); if (x == null) lance un nouveau nosuchementElementException (); retour x; } public e PollFirst () {int h = tête; E résultat = éléments [h]; // L'élément est null si deque vide if (result == null) renvoie null; éléments [h] = null; // Réinitialise cette position dans le tableau à Null pour une collection de déchets pratique. tête = (h + 1) et (elements.length - 1); // inverser la valeur de la tête, ce qui équivaut à déplacer le pointeur de la pile sur une grille. Par exemple, 12 -〉 13 Résultat de retour; } public e peekFirst () {return Elements [Head]; // éléments [tête] est nul si deque vide}Ce qui précède concerne cet article, j'espère qu'il sera utile pour tout le monde d'apprendre la programmation Java.