English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

تعليمات Java الأساسية

تحكم في العملية بونجافا

مجموعات بونجافا

بونجافا (I) متوجه للكائن

بونجافا (II) متوجه للكائن

بونجافا (III) متوجه للكائن

معالجة الاستثناءات Java

قوائم بونجافا (List)

بونجافا (Queue) في فريق

مجموعات بونجافا (Map)

مجموعات بونجافا (Set)

مدخلات/إخراجات بونجافا (I/O)

قراء/كتابة بونجافا

مواضيع بونجافا أخرى

ArrayDeque Java

في هذا الدليل، سنستخدم أمثلة لدراسة فئة ArrayDeque وطرقها. كما سنتعلم كيفية استخدام ArrayDeque لإنشاء مكتبة (Stack).

في بونجافا، يمكننا استخدام فئة ArrayDeque لإنشاء بنية بيانات من نوع فريق (Queue) وفرق (Deque) باستخدام ملفات النصوص.

واجهات تنفيذ ArrayDeque

في ArrayDeque فئة تنفيذ هاتين الواجهتين:

إنشاء ArrayDeque

لإنشاء قائمة ArrayDeque ثنائية الاتجاه، يجب علينا استيراد حزمة java.util.ArrayDeque.

هذه هي الطرق التي يمكننا إنشاء قائمة ArrayDeque ثنائية الاتجاه باستخدام Java:

ArrayDeque<Type> animal = new ArrayDeque<>();

في هذا السياق، Type يمثل نوع قائمة ArrayDeque ثنائية الاتجاه. على سبيل المثال،

//إنشاء ArrayDeque من النوع الصحيح للكلمات
ArrayDeque<String> animals = new ArrayDeque<>();
//إنشاء ArrayDeque من النوع الصحيح للعدد
ArrayDeque<Integer> age = new ArrayDeque<>();

طرق ArrayDeque

يقدم كلاً من ArrayDeque كل من الطرق الموجودة في واجهات Queue و Deque.

إدراج العنصر في قائمة ثنائية الاتجاه

1. استخدام add()،addFirst() و addLast() لإضافة العناصر

  • add() - إدراج العنصر المحدد في نهاية قائمة ArrayDeque ثنائية الاتجاه

  • addFirst() - إدراج العنصر المحدد في بداية قائمة ArrayDeque ثنائية الاتجاه

  • addLast() - إدراج المحتوى المحدد في نهاية قائمة ArrayDeque ثنائية الاتجاه (مماثلة لـ add())

ملاحظة:إذا كانت قائمة ArrayDeque ثنائية الاتجاه ممتلئة، فإن جميع هذه الطرق add()،addFirst() و addLast() تسبب في إطلاق حالة استثنائية IllegalStateException.

على سبيل المثال،

import java.util.ArrayDeque;
class Main {
    public static void main(String[] args) {
        ArrayDeque<String> animals = new ArrayDeque<>();
        //استخدام add ()
        animals.add("Dog");
        //استخدام addFirst ()
        animals.addFirst("Cat");
        //استخدام addLast()
        animals.addLast("Horse");
        System.out.println("ArrayDeque: " + animals);
    }
}

نتائج الإخراج

ArrayDeque: [Cat, Dog, Horse]

2. استخدام offer()،offerFirst() و offerLast() لإدراج العناصر

  • offer() - إدراج العنصر المحدد في نهاية قائمة ArrayDeque ثنائية الاتجاه

  • offerFirst() - إدراج العنصر المحدد في بداية قائمة ArrayDeque ثنائية الاتجاه

  • offerLast() - إدراج العنصر المحدد في نهاية قائمة ArrayDeque ثنائية الاتجاه

ملاحظة: offer()،offerFirst() و offerLast() تعود صحيحة إذا تم إدراج العنصر بنجاح؛ وإلا، تعود. إذا كانت قائمة ArrayDeque ثنائية الاتجاه ممتلئة، فإن هذه الطرق تعود صحيحة.

على سبيل المثال،

import java.util.ArrayDeque;
class Main {
    public static void main(String[] args) {
        ArrayDeque<String> animals = new ArrayDeque<>();
        //استخدام offer()
        animals.offer("Dog");
        //استخدام offerFirst()
        animals.offerFirst("Cat");
        //استخدام offerLast()
        animals.offerLast("Horse");
        System.out.println("ArrayDeque: " + animals);
    }
}

نتائج الإخراج

ArrayDeque: [Cat, Dog, Horse]

زيارة عناصر ArrayDeque

1.استخدام getFirst() وgetLast() لاستقبال العناصر

  • getFirst() - يعود إلى النهاية الأولى من ArrayDeque المزدوج الجانب

  • getLast() - يعود إلى النهاية الأخيرة من ArrayDeque المزدوج الجانب

ملاحظة:إذا كان ArrayDeque المزدوج الجانب فارغًا، فإن getFirst() وgetLast() يلقي NoSuchElementException.

على سبيل المثال،

import java.util.ArrayDeque;
class Main {
    public static void main(String[] args) {
        ArrayDeque<String> animals = new ArrayDeque<>();
        animals.add("Dog");
        animals.add("Cat");
        animals.add("Horse");
        System.out.println("ArrayDeque: " + animals);
        //الحصول على النهاية الأولى
        String firstElement = animals.getFirst();
        System.out.println("النهاية الأولى: " + firstElement);
        //الحصول على النهاية الأخيرة
        String lastElement = animals.getLast();
        System.out.println("النهاية الأخيرة: " + lastElement);
    }
}

نتائج الإخراج

ArrayDeque: [Dog, Cat, Horse]
النهاية الأولى: Dog
النهاية الأخيرة: Horse

2.استخدام peek()، peekFirst() وpeekLast() لاستقبال العناصر

  • peek() - يعود إلى النهاية الأولى من ArrayDeque المزدوج الجانب

  • peekFirst() - يعود إلى النهاية الأولى من ArrayDeque المزدوج الجانب (يساوي peek())

  • peekLast() - يعود إلى النهاية الأخيرة من ArrayDeque المزدوج الجانب

على سبيل المثال،

import java.util.ArrayDeque;
class Main {
    public static void main(String[] args) {
        ArrayDeque<String> animals = new ArrayDeque<>();
        animals.add("Dog");
        animals.add("Cat");
        animals.add("Horse");
        System.out.println("ArrayDeque: " + animals);
        //استخدام peek()
        String element = animals.peek();
        System.out.println("الرأس: " + element);
        //استخدام peekFirst()
        String firstElement = animals.peekFirst();
        System.out.println("النهاية الأولى: " + firstElement);
        //استخدام peekLast
        String lastElement = animals.peekLast();
        System.out.println("النهاية الأخيرة: " + lastElement);
    }
}

نتائج الإخراج

ArrayDeque: [Dog, Cat, Horse]
الرأس: Dog
النهاية الأولى: Dog
النهاية الأخيرة: Horse

ملاحظة:إذا كان ArrayDeque المزدوج الجانب فارغًا، فإن peek()، peekFirst() وgetLast() يلقي NoSuchElementException.

إزالة عناصر ArrayDeque

1.استخدام remove()،removeFirst()،removeLast() لتحذيف العناصر

  • remove() - يعود ويزيل عنصرًا واحدًا من العنصر الأول في ArrayDeque دالة الحدث مزدوجة

  • remove(element) - يعود ويزيل العنصر المحدد من ArrayDeque دالة الحدث مزدوجة

  • removeFirst() - يعود ويزيل العنصر الأول من ArrayDeque دالة الحدث مزدوجة (مثل remove())

  • removeLast() - يعود ويزيل العنصر الأخير من ArrayDeque دالة الحدث مزدوجة

ملاحظة:إذا كانت ArrayDeque دالة الحدث مزدوجة فارغة، فإن remove()، removeFirst() و removeLast() تسبب استثناءات. بالإضافة إلى ذلك، إذا لم يتم العثور على العنصر، فإن remove(element) تسبب استثناءً.

على سبيل المثال،

import java.util.ArrayDeque;
class Main {
    public static void main(String[] args) {
        ArrayDeque<String> animals = new ArrayDeque<>();
        animals.add("Dog");
        animals.add("Cat");
        animals.add("Cow");
        animals.add("Horse");
        System.out.println("ArrayDeque: " + animals);
        //استخدام remove()
        String element = animals.remove();
        System.out.println("إزالة عنصر: " + element);
        System.out.println("新的ArrayDeque: " + animals);
        //استخدام removeFirst()
        String firstElement = animals.removeFirst();
        System.out.println("删除第一个元素: " + firstElement);
        //استخدام removeLast()
        String lastElement = animals.removeLast();
        System.out.println("删除最后一个元素: " + lastElement);
    }
}

نتائج الإخراج

ArrayDeque: [Dog, Cat, Cow, Horse]
删除Element: Dog
新的ArrayDeque: [Cat, Cow, Horse]
删除第一个元素: Cat
删除最后一个元素: Horse

2.استخدام poll()،pollFirst() و pollLast() لتحذيف العناصر

  • poll() - يعود ويزيل العنصر الأول من ArrayDeque دالة الحدث مزدوجة

  • pollFirst() - يعود ويزيل العنصر الأول من ArrayDeque دالة الحدث مزدوجة (مثل poll())

  • pollLast() - يعود ويزيل العنصر الأخير من ArrayDeque دالة الحدث مزدوجة

ملاحظة:إذا كان ArrayDeque دالة الحدث مزدوجة فارغة، فإن poll()، pollFirst() و pollLast() تعود null إذا لم يتم العثور على العنصر.

على سبيل المثال،

import java.util.ArrayDeque;
class Main {
    public static void main(String[] args) {
        ArrayDeque<String> animals = new ArrayDeque<>();
        animals.add("Dog");
        animals.add("Cat");
        animals.add("Cow");
        animals.add("Horse");
        System.out.println("ArrayDeque: " + animals);
        //استخدام poll()
        String element = animals.poll();
        System.out.println("إزالة عنصر: " + element);
        System.out.println("新的ArrayDeque: " + animals);
        //استخدام pollFirst()
        String firstElement = animals.pollFirst();
        System.out.println("删除第一个元素: " + firstElement);
        //使用pollLast()
        String lastElement = animals.pollLast();
        System.out.println("删除最后一个元素: " + lastElement);
    }
}

نتائج الإخراج

ArrayDeque: [Dog, Cat, Cow, Horse]
删除Element: Dog
新的ArrayDeque: [Cat, Cow, Horse]
删除第一个元素: Cat
删除最后一个元素: Horse

3.删除元素:使用clear()方法

要从ArrayDeque双端队列中删除所有元素,我们使用clear()方法。例如,

import java.util.ArrayDeque;
class Main {
    public static void main(String[] args) {
        ArrayDeque<String> animals = new ArrayDeque<>();
        animals.add("Dog");
        animals.add("Cat");
        animals.add("Horse");
        System.out.println("ArrayDeque: " + animals);
        //使用clear()
        animals.clear();
        System.out.println("新的ArrayDeque: " + animals);
    }
}

نتائج الإخراج

ArrayDeque: [Dog, Cat, Horse]
新的ArrayDeque: []

迭代遍历ArrayDeque

  • iterator() - 返回可用于遍历ArrayDeque双端队列的迭代器

  • descendingIterator() -返回一个迭代器,该迭代器可用于以相反顺序遍历ArrayDeque双端队列

للبدء في استخدام هذه الطرق، يجب علينا استيراد حزمة java.util.Iterator. على سبيل المثال،

import java.util.ArrayDeque;
import java.util.Iterator;
class Main {
    public static void main(String[] args) {
        ArrayDeque<String> animals = new ArrayDeque<>();
        animals.add("Dog");
        animals.add("Cat");
        animals.add("Horse");
        System.out.print("ArrayDeque: \n");
        //استخدام iterator()
        Iterator<String> iterate = animals.iterator();
        while(iterate.hasNext()) {
            System.out.print(iterate.next());
            System.out.print(", ");
        }
        System.out.print("\nالعكس ArrayDeque: \n");
        //استخدام descendingIterator()
        Iterator<String> desIterate = animals.descendingIterator();
        while(desIterate.hasNext()) {
            System.out.print(desIterate.next());
            System.out.print(", ");
        }
    }
}

نتائج الإخراج

ArrayDeque: [Dog, Cat, Horse]
قائمة معكوسة: [Horse, Cat, Dog]

استخدام descendingIterator()

طرق أخرىالطريقة
وصف المحتوىelement()
إرجاع عنصرًا من رأس ArrayDeque دالة الحالة الثنائية.contains(element)
البحث عن العنصر في ArrayDeque دالة الحالة الثنائية.
إذا تم العثور على العنصر، فإرجاع true، وإلا إرجاع false.size()
إرجاع طول ArrayDeque دالة الحالة الثنائية.toArray()
تحويل ArrayDeque دالة الحالة الثنائية إلى مصفوفة وإرجاعها.clone()

إنشاء نسخة من ArrayDeque دالة الحالة الثنائية وإرجاعها.

لتحقيق ArrayDeque كقائمة في JavaLIFO (آخر دخل أولاً خروجًا)يُنصح باستخدام Stack فيStack classيستخدم دالة الحالة الثنائية. ArrayDeque أسرع من Stack class.

يقدم ArrayDeque طرقًا يمكن استخدامها لتحقيق قائمة

  • push() - يضيف عنصرًا إلى أعلى القائمة

  • peek() - يعيد العنصر من أعلى القائمة

  • pop() - يعيد العنصر ويحذفه من أعلى القائمة

على سبيل المثال،

import java.util.ArrayDeque;
class Main {
    public static void main(String[] args) {
        ArrayDeque<String> stack = new ArrayDeque<>();
        //إضافة العنصر إلى stack
        stack.push("Dog");
        stack.push("Cat");
        stack.push("Horse");
        System.out.println("Stack: " + stack);
        //استدعاء العنصر من أعلى قائمة
        String element = stack.peek();
        System.out.println("استدعاء العنصر: " + element);
        //حذف العنصر من أعلى堆
        String remElement = stack.pop();
        System.out.println("حذف element: " + remElement);
    }
}

نتائج الإخراج

Stack: [Horse, Cat, Dog]
استنساخ عنصر: Horse
حذف عنصر: Horse

فئة ArrayDeque و LinkedList

ArrayDeque وجميع LinkedList في Javaتم تحقيق واجهة Deque. ولكن، هناك بعض الاختلافات بينهما.

  • يدعم LinkedList العناصر الفارغة، بينما لا يدعم ArrayDeque.

  • كل عقدة في السلسلة تحتوي على رابط إلى العقدة الأخرى. هذا هو السبب في أن LinkedList تحتاج إلى مساحة تخزين أكبر من ArrayDeque.

  • إذا كنت تريد تنفيذ بنية البيانات Queue أو Deque، فإن ArrayDeque قد يكون أسرع من LinkedList.