JavaRush /مدونة جافا /Random-AR /المصفوفات في جافا

المصفوفات في جافا

نشرت في المجموعة
تخيل الخلايا في غرفة التخزين. لكل منها رقمها الخاص، وتحتوي كل منها على نوع من كائن "الأمتعة". أو قائمة النبيذ، حيث يتم ترقيم جميع أنواع النبيذ وعند تقديم الطلب، تحتاج فقط إلى إعطاء رقم المشروب. أو قائمة الطلاب في المجموعة، حيث سيتم كتابة الطالب "أندريف" في الخلية الأولى، و "ياكوفليف" في الخلية الأخيرة. أو قائمة بأسماء ركاب الطائرة، ويخصص لكل منهم مقعد برقم محدد. في Java، للعمل مع هياكل مماثلة، أي الكثير من البيانات المتجانسة، غالبا ما تستخدم المصفوفات في Java.

ما هي المصفوفة؟

المصفوفة عبارة عن بنية بيانات تقوم بتخزين عناصر من نفس النوع. يمكن اعتبارها مجموعة من الخلايا المرقمة، يمكن أن تحتوي كل منها على بعض البيانات (عنصر بيانات واحد لكل خلية). يتم الوصول إلى خلية معينة من خلال رقمها. يُطلق على رقم العنصر في المصفوفة أيضًا اسم الفهرس . في حالة Java، يكون المصفوفة متجانسة، أي أن جميع خلاياها ستخزن عناصر من نفس النوع. لذلك، تحتوي مصفوفة الأعداد الصحيحة على أعداد صحيحة فقط (على سبيل المثال، من النوع int )، ومصفوفة من السلاسل تحتوي على سلاسل فقط، ومصفوفة من عناصر فئة Dog التي أنشأناها ستحتوي على كائنات Dog فقط . أي أنه في Java لا يمكننا وضع عدد صحيح في الخلية الأولى من المصفوفة، وسلسلة في الخلية الثانية ، و"كلب" في الخلية الثالثة. المصفوفات في جافا

إعلان المصفوفة

كيفية الإعلان عن مجموعة؟

مثل أي متغير، يجب الإعلان عن مصفوفة في Java. يمكنك القيام بذلك بإحدى طريقتين. إنهما متكافئان، لكن الأول أكثر اتساقًا مع نمط Java. والثاني هو إرث لغة C (تحول العديد من مبرمجي C إلى Java، ومن أجل راحتهم تم ترك طريقة بديلة). يوضح الجدول كلا الطريقتين لإعلان مصفوفة في Java:
لا. إعلان صفيف، بناء جملة جافا أمثلة تعليق
1.
dataType[] arrayName;
int[] myArray;

Object[]
arrayOfObjects;
من المستحسن الإعلان عن مصفوفة بهذه الطريقة، وهذا هو أسلوب جافا
2.
dataType arrayName[];
int myArray[];

Object
arrayOfObjects[];
طريقة موروثة للإعلان عن المصفوفات من C/C++ والتي تعمل أيضًا في Java
في كلتا الحالتين، dataType هو نوع المتغيرات في المصفوفة. في الأمثلة أعلنا صفيفين. سيقوم أحدهما بتخزين أعداد صحيحة من النوع int ، بينما سيقوم الآخر بتخزين كائنات من النوع Object . وبالتالي، عندما يتم الإعلان عن مصفوفة، يكون لها اسم ونوع (نوع متغيرات المصفوفة). arrayName هو اسم المصفوفة.

إنشاء مصفوفة

كيفية إنشاء مصفوفة؟

مثل أي كائن آخر، يمكنك إنشاء مصفوفة Java، أي حجز مساحة ذاكرة لها، باستخدام عامل التشغيل الجديد . يتم ذلك على النحو التالي:
new typeOfArray [length];
حيث typeOfArray هو نوع المصفوفة، والطول هو طوله (أي عدد الخلايا)، معبرًا عنه بالأعداد الصحيحة ( int ). ومع ذلك، قمنا هنا بتخصيص ذاكرة للمصفوفة فقط، ولكن لم نربط المصفوفة التي تم إنشاؤها بأي متغير تم الإعلان عنه مسبقًا. عادةً ما يتم الإعلان عن المصفوفة أولاً ثم يتم إنشاؤها، على سبيل المثال:
int[] myArray; // array declaration
myArray = new int[10]; // creation, that is, allocation of memory for an array of 10 elements of type int
لقد أعلنا هنا عن مصفوفة من الأعداد الصحيحة تسمى myArray ، ثم أعلنا أنها تتكون من 10 خلايا (كل منها ستخزن عددًا صحيحًا). ومع ذلك، من الشائع جدًا إنشاء مصفوفة مباشرة بعد التصريح باستخدام بناء الجملة المختصر هذا:
int[] myArray = new int[10]; // declaration and allocation of memory "in one bottle"
ملحوظة:بعد إنشاء مصفوفة باستخدام new ، تمتلئ خلاياها بالقيم الافتراضية. بالنسبة للأنواع الرقمية (كما في مثالنا) سيكون هذا 0، بالنسبة للأنواع المنطقية - false ، بالنسبة للأنواع المرجعية - null . وهكذا بعد العملية
int[] myArray = new int[10];
نحصل على مصفوفة من عشرة أعداد صحيحة، وحتى يتغير هذا أثناء البرنامج، تحتوي كل خلية على 0.

يمكن العثور على مزيد من المعلومات حول المصفوفات في المقالة " شيء عن المصفوفات "

طول المصفوفة في جافا

كما قلنا أعلاه، طول المصفوفة هو عدد العناصر التي تم تصميم المصفوفة من أجلها. لا يمكن تغيير طول المصفوفة بمجرد إنشائها. ملحوظة:في Java، يتم ترقيم عناصر المصفوفة بدءًا من الصفر. أي أنه إذا كان لدينا مصفوفة مكونة من 10 عناصر، فإن العنصر الأول في المصفوفة سيكون له فهرس 0، وآخر عنصر سيكون له فهرس 9. المصفوفات في جافا - 3يمكنك الوصول إلى طول المصفوفة باستخدام متغير الطول . مثال:
int[] myArray = new int[10]; // created an array of integers with 10 elements and named it myArray
System.out.println(myArray.length); // printed to the console the length of the array, that is, the number of elements that we can put in the array
مخرجات البرنامج:
10

تهيئة المصفوفة والوصول إلى عناصرها

كيفية إنشاء مصفوفة في Java واضحة بالفعل. بعد هذا الإجراء، لا نحصل على مصفوفة فارغة، بل مصفوفة مليئة بالقيم الافتراضية. على سبيل المثال، في حالة int ستكون هذه القيمة 0، وإذا كان لدينا مصفوفة تحتوي على بيانات من نوع مرجعي، فسيتم كتابة null افتراضيًا في كل خلية . نحن نصل إلى عنصر المصفوفة (أي نكتب قيمة فيه أو نعرضه على الشاشة أو نجري بعض العمليات به) من خلال فهرسه. تؤدي تهيئة المصفوفة إلى ملئها ببيانات محددة (ليس بشكل افتراضي). مثال: لنقم بإنشاء مصفوفة من 4 مواسم ونملأها بقيم السلسلة - أسماء هذه الفصول.
String[] seasons  = new String[4]; /* declared and created an array. Java allocated memory for an array of 4 strings, and now each cell is null (because the string is a reference type)*/

seasons[0] = "Winter"; /* in the first cell, that is, in the cell with a zero number, we wrote the string Winter. Here we get access to the zero element of the array and write a specific value there */
seasons[1] = "Spring"; // do the same procedure with cell number 1 (second)
seasons[2] = "Summer"; // ...number 2
seasons[3] = "Autumn"; // and with the last one, number 3
الآن تحتوي جميع الخلايا الأربع في المصفوفة على أسماء الفصول. يمكن أيضًا إجراء التهيئة بشكل مختلف، من خلال الجمع بين التهيئة والإعلان:
String[] seasons  = new String[] {"Winter", "Spring", "Summer", "Autumn"};
علاوة على ذلك، يمكن حذف العامل الجديد :
String[] seasons  = {"Winter", "Spring", "Summer", "Autumn"};

كيفية عرض مصفوفة في جافا على الشاشة؟

يمكنك عرض عناصر المصفوفة على الشاشة (أي على وحدة التحكم)، على سبيل المثال، باستخدام حلقة for . سيتم مناقشة طريقة أخرى أقصر لعرض المصفوفة على الشاشة في الفقرة "طرق مفيدة للعمل مع المصفوفات" أدناه. الآن، دعونا نلقي نظرة على مثال مع الإخراج الدوري للمصفوفة:
String[] seasons  = new String[] {"Winter", "Spring", "Summer", "Autumn"};
for (int i = 0; i < 4; i++) {
System.out.println(seasons[i]);
}
ونتيجة لذلك، سيخرج البرنامج النتيجة التالية:
شتاء ربيع صيف خريف

مصفوفات جافا أحادية البعد ومتعددة الأبعاد

ماذا لو أردنا إنشاء مصفوفة من المصفوفات ليس مصفوفة من الأرقام، أو مصفوفة من السلاسل، أو مصفوفة من بعض الكائنات؟ جافا تسمح لك بالقيام بذلك. المصفوفة المألوفة بالفعل int[] myArray = new int[8] هي ما يسمى بالمصفوفة أحادية البعد. وتسمى مجموعة المصفوفات ثنائية الأبعاد. إنه مثل الجدول الذي يحتوي على رقم الصف ورقم العمود. أو، إذا تعلمت بدايات الجبر الخطي، على المصفوفة. المصفوفات في جافا - 4لماذا هناك حاجة لمثل هذه المصفوفات؟ على وجه الخصوص، لبرمجة نفس المصفوفات والجداول، وكذلك الكائنات التي تشبهها في الهيكل. على سبيل المثال، يمكن تحديد ملعب الشطرنج كمصفوفة 8x8. يتم الإعلان عن مصفوفة متعددة الأبعاد وإنشائها على النحو التالي:
int[][] myTwoDimentionalArray = new int [8][8];
يوجد بالضبط 64 عنصرًا في هذه المصفوفة: myTwoDimentionalArray[0][0], myTwoDimentionalArray[0][1], myTwoDimentionalArray[1][0], myTwoDimentionalArray[1][1]وما إلى ذلك حتى myTwoDimentionalArray[7][7]. لذا، إذا استخدمناها لتمثيل رقعة الشطرنج، فإن الخلية A1 ستمثل myTwoDimentionalArray[0][0], وستمثل E2 myTwoDimentionalArray[4][1]. حيث يوجد اثنان، هناك ثلاثة. في Java، يمكنك تحديد مصفوفة من المصفوفات... مصفوفة من المصفوفات، وهكذا. صحيح أنه نادرًا ما يتم استخدام المصفوفات ثلاثية الأبعاد أو أكثر. ومع ذلك، باستخدام مصفوفة ثلاثية الأبعاد، يمكنك برمجة، على سبيل المثال، مكعب روبيك.

طرق مفيدة للعمل مع المصفوفات

للعمل مع المصفوفات في Java هناك فئة java.util.Arrays (المصفوفات باللغة الإنجليزية تعني "المصفوفات"). بشكل عام، يتم تنفيذ العمليات التالية غالبًا باستخدام المصفوفات: التعبئة بالعناصر (التهيئة)، واسترجاع العنصر (حسب الرقم)، والفرز والبحث. يعد البحث عن المصفوفات وفرزها موضوعًا منفصلاً. من ناحية، من المفيد جدًا ممارسة وكتابة العديد من خوارزميات البحث والفرز بنفسك. من ناحية أخرى، تمت بالفعل كتابة أفضل الممارسات وإدراجها في مكتبات Java، ويمكن استخدامها بشكل قانوني. فيما يلي ثلاث طرق مفيدة لهذه الفئة

فرز مصفوفة

تقوم الطريقة void sort(int[] myArray, int fromIndex, int toIndex)بفرز مصفوفة من الأعداد الصحيحة أو مصفوفتها الفرعية بترتيب تصاعدي.

البحث في مصفوفة عن العنصر المطلوب

int binarySearch(int[] myArray, int fromIndex, int toIndex, int key). تبحث هذه الطريقة عن العنصر الأساسي في myArray أو المصفوفة الفرعية التي تم فرزها بالفعل ، بدءًا من fromIndex وانتهاءً بـ toIndex . إذا تم العثور على العنصر، تقوم الطريقة بإرجاع فهرسه، وإذا لم يتم العثور عليه - . (-fromIndex)-1

تحويل مصفوفة إلى سلسلة

تقوم الطريقة String toString(int[] myArray)بتحويل الصفيف إلى سلسلة. الشيء هو أنه في صفائف Java لا يتم تجاوز toString() . هذا يعني أنك إذا حاولت عرض المصفوفة بأكملها (بدلاً من عنصر تلو الآخر، كما في " طباعة مصفوفة على الشاشة ") على الشاشة مباشرةً ( System.out.println(myArray))، فستحصل على اسم الفئة ورمز التجزئة السداسي العشري للمصفوفة (يتم تعريف هذا بواسطة Object.toString() ). إذا كنت مبتدئا فقد لا تفهم شرح الطريقة toString. في المرحلة الأولى، هذا ليس ضروريًا، ولكن باستخدام هذه الطريقة يتم تبسيط مخرجات المصفوفة. تسهل Java عرض المصفوفة دون استخدام حلقة. المزيد عن هذا في المثال أدناه.

مثال على الفرز، البحث الثنائي وtoString

لنقم بإنشاء مصفوفة من الأعداد الصحيحة، وعرضها على الشاشة باستخدام toString ، وفرزها باستخدام طريقة الفرز ، والعثور على رقم ما فيها.
class Main {
    public static void main(String[] args) {
        int[] array = {1, 5, 4, 3, 7}; //declaring and initializing the array
        System.out.println(array);//trying to display our array on the screen without the toString method - we get a hexadecimal number
        System.out.println(Arrays.toString(array));//печатаем массив "правильно"
        Arrays.sort(array, 0, 4); // sort the entire array from zero to the fourth member
        System.out.println(Arrays.toString(array));//print the sorted array to the screen
        int key = Arrays.binarySearch(array, 5); // ищем key - число 5 в отсортированном массиве.
        //binarySearch method will return the index of the sorted array element, in which the required number is "hidden"
        System.out.println(key);//распечатываем индекс искомого числа
System.out.println(Arrays.binarySearch(array, 0));//а теперь попробуем найти число, которого в массиве нет,
        // and immediately display the result on the screen

    }
}
مخرجات البرنامج:
[I@1540e19d [1, 5, 4, 3, 7] [1, 3, 4, 5, 7] 3 -1
السطر الأول هو محاولة لعرض مصفوفة بدون toString ، والثاني هو عرض مصفوفة باستخدام toString ، والثالث عبارة عن مصفوفة مرتبة، والرابع هو فهرس الرقم المطلوب 5 في مصفوفة مرتبة (تذكر أننا نحسب من صفر، وبالتالي فإن العنصر الرابع في المصفوفة له فهرس 3). في السطر الخامس نرى القيمة -1 . لا تحتوي المصفوفة على مثل هذا الفهرس. يشير الإخراج إلى أن العنصر المطلوب (في هذه الحالة، 0) ليس موجودًا في المصفوفة.

المزيد عن أساليب فئة المصفوفة

فئة المصفوفات واستخدامها - توضح المقالة بعض أساليب فئة المصفوفات

الشيء الرئيسي حول المصفوفات

  • الخصائص الرئيسية للمصفوفة: نوع البيانات الموضوعة فيها، الاسم والطول.
    يتم تحديد الأخير أثناء التهيئة (تخصيص الذاكرة للمصفوفة)، ويتم تحديد المعلمتين الأوليين عند الإعلان عن المصفوفة.

  • يجب تحديد حجم المصفوفة (عدد الخلايا) في int

  • لا يمكنك تغيير طول المصفوفة بعد إنشائها.

  • يمكن الوصول إلى عنصر المصفوفة من خلال الفهرس الخاص به.

  • في المصفوفات، كما هو الحال في أي مكان آخر في Java، يتم ترقيم العناصر بدءًا من الصفر.

  • بعد إجراء إنشاء المصفوفة، يتم ملؤها بالقيم الافتراضية.

  • يتم تنظيم المصفوفات في Java بشكل مختلف عن C++. إنها تقريبًا نفس مؤشرات المصفوفات الديناميكية.

مواد مفيدة حول المصفوفات

هل تريد معرفة المزيد عن المصفوفات؟ يرجى إلقاء نظرة على المقالات أدناه. هناك الكثير من المعلومات المثيرة للاهتمام والمفيدة حول هذا الموضوع.
  1. شيء عن المصفوفات - مقالة مفصلة جيدة عن المصفوفات

  2. فئة المصفوفات واستخدامها - توضح المقالة بعض أساليب فئة المصفوفات

  3. المصفوفات متعددة الأبعاد - مقالة مفصلة عن المصفوفات متعددة الأبعاد مع أمثلة.

  4. إرجاع مصفوفة ذات طول صفري، وليست خالية - يتحدث مؤلف البرمجة الفعالة جوشوا بلوخ عن كيفية إرجاع المصفوفات الفارغة بشكل أفضل

تعليقات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION