في J2Se6 ، تم تقديم فئة Arraydeque ، والتي ترث واجهة Deque (قائمة انتظار ثنائية الاتجاه). باستخدام هذه الفئة ، يمكنك تنفيذ وظائف فئة java.util.stack بنفسك ، وإزالة وظيفة التزامن متعددة الخيوط لـ java.util.stack.
على سبيل المثال ، قم بإنشاء مكدس يخزن نوعًا صحيحًا ، فقط قم بإنشاء متغير من فئة ArrayDeque كخاصية في الفصل ، ثم حدده على أنه مكدس وأدخل المكدس ، ومراقبة العناصر الموجودة في الجزء العلوي من المكدس ، وقم بتشغيل متغير المثيل مباشرة من Arraydeque.
استيراد java.util.arraydequ ؛ استيراد java.util.dequ ؛ الطبقة العامة integerstack {private deque <integer> data = new ArrayDequ <integer> () ؛ Public void push (integer element) {data.addfirst (element) ؛ } integer pop () {return data.removefirst () ؛ } integer pleek () {return data.peekfirst () ؛ } السلسلة العامة toString () {return data.toString () ؛ } public static void main (string [] args) {integerstack stack = new integerstack () ؛ لـ (int i = 0 ؛ i <5 ؛ i ++) {stack.push (i) ؛ } system.out.println (stack) ؛ System.out.println ("بعد دفع 5 عناصر:" + مكدس) ؛ int m = stack.pop () ؛ System.out.println ("proped element =" + m) ؛ System.out.println ("بعد ظهور عنصر واحد:" + stack) ؛ int n = stack.peek () ؛ System.out.println ("element element =" + n) ؛ System.out.println ("بعد النظر 1 عنصر:" + مكدس) ؛ }} رمز المصدر لـ java.util.arraydeque:
العناصر الخاصة العابرة e [] ؛ رئيس int عابر خاص. ذيل الباحث العابر الخاص ؛ /*يتم تخزين الموقع الذي يتم تخزينه هنا من الموقف الأخير من مجموعة العناصر*/ public void addFirst (e e) {if (e == null) رمي nullpointerxception () ؛ العناصر [Head = (Head - 1) & (Elements.Length - 1)] = e ؛ // الافتراضي لقدرة الصفيف الأولى هي 16 ، الرأس = (0-1) و (16-1) = 15 إذا (Head == tail) doubleCapacity () ؛ } /*في كل مرة يتم فيها توسيع السعة ، يتم إعادتها إلى صفيف جديد بترتيب الإدراج ، ويتم وضع أحدث واحدة في الموضع الأول من الصفيف. */ private void doublecapacity () {assert head == tail ؛ int p = الرأس ؛ int n = elements.length ؛ int r = n - p ؛ // عدد العناصر على يمين p int newCapacity = n << 1 ؛ إذا كان (NewCapacity <0) رمي جديد غير قانوني ("آسف ، deque كبير جدًا") ؛ كائن [] a = كائن جديد [NewCapacity] ؛ System.ArrayCopy (عناصر ، P ، A ، 0 ، R) ؛ System.ArrayCopy (عناصر ، 0 ، A ، R ، P) ؛ عناصر = (e []) a ؛ الرأس = 0 ؛ ذيل = ن ؛ } public e removeFirst () {e x = pollfirst () ؛ إذا (x == null) رمي nosuchelementException () ؛ إرجاع x ؛ } pullfirst () {int h = head ؛ e النتيجة = عناصر [h] ؛ // العنصر هو فارغ إذا كان deque فارغًا إذا (النتيجة == null) إرجاع فارغ ؛ عناصر [h] = فارغة ؛ // إعادة تعيين هذا الموقف في الصفيف إلى NULL لجمع القمامة المريحة. HEAD = (H + 1) & (Elements.Length - 1) ؛ // عكس قيمة الرأس ، وهو ما يعادل تحريك مؤشر المكدس أسفل شبكة واحدة. على سبيل المثال ، 12-〉 13 نتيجة الإرجاع ؛ } peekfirst () {refert elements [head] ؛ // عناصر [الرأس] لاغية إذا كان Deque فارغًا}ما سبق هو كل شيء عن هذا المقال ، آمل أن يكون من المفيد للجميع تعلم برمجة Java.