CodeGym /مدونة جافا /Random-AR /المصفوفات في جافا
John Squirrels
مستوى
San Francisco

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

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

المصفوفات في دورة CodeGym

في CodeGym، تبدأ العمل مع المصفوفات في المستوى 7 من مهمة Java Syntax. تم تخصيص ثلاثة دروس لهم، بالإضافة إلى 8 مهام على مستويات مختلفة لتعزيز مهاراتك في العمل مع المصفوفات. لكنك ستواجه المصفوفات عدة مرات خلال الدورة (على وجه الخصوص، ستتم دراسة فئة Array في مهمة Java Collections وكجزء من عملك المستقبلي.

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

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

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

كيف تعلن عن مصفوفة؟

مثل أي متغير، يجب الإعلان عن مصفوفة في 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 s، والآخر - كائنات الكائن . وبالتالي، فإن إعلان المصفوفة له اسم ونوع (نوع عناصر المصفوفة). ArrayName هو اسم المصفوفة.

إنشاء مصفوفة

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

مثل أي كائن آخر، يمكنك إنشاء مصفوفة Java، أي حجز مكان لها في الذاكرة، باستخدام عامل التشغيل الجديد . هذا هو كيفية القيام به:
new typeOfArray[length];
حيث typeOfArray هو نوع المصفوفة والطول هو طوله (أي عدد الخلايا) معبرًا عنه برقم صحيح ( int). لكن لاحظ أننا قمنا هنا بتخصيص ذاكرة للمصفوفة فقط، ولم نقم بربط المصفوفة المعلنة بأي متغير تم الإعلان عنه مسبقًا. عادةً، يتم الإعلان عن المصفوفة أولاً ثم إنشاء مثيل لها، على سبيل المثال:
int[] myArray; // Array declaration
myArray = new int[10]; // Create (allocate memory for) an array of 10 ints
قمنا هنا بإنشاء مصفوفة من الأعداد الصحيحة تسمى myArray ، لإعلام المترجم بأنها تتكون من 10 خلايا (كل منها ستحتوي على عدد صحيح). ومع ذلك، من الأكثر شيوعًا استخدام الصيغة المختصرة التالية لإنشاء مصفوفة فورًا عند الإعلان عنها:
int[] myArray = new int [10]; // Declare the array and allocate memory "in one blow"
يرجى الملاحظة:بعد إنشاء مصفوفة باستخدام عامل التشغيل الجديد ، تحتوي خلاياها على قيم افتراضية. بالنسبة للأنواع الرقمية (كما في مثالنا)، فإن القيمة الافتراضية هي 0، وبالنسبة للنوع المنطقي ، فهي false ، وبالنسبة للأنواع المرجعية، فهي خالية . وهكذا بعد تنفيذ هذا البيان
int[] myArray = new int[10];
نحصل على مصفوفة مكونة من عشرة أعداد صحيحة، وإلى أن يقوم البرنامج بشيء ما لتغيير القيم، تحتوي كل خلية على 0.

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

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

كما قلنا أعلاه، طول المصفوفة هو عدد العناصر التي تم تصميم المصفوفة للاحتفاظ بها. لا يمكن تغيير طول المصفوفة بعد إنشائها. يرجى الملاحظةيتم ترقيم عناصر المصفوفة بدءًا من الصفر في Java. وبالتالي، إذا كان لدينا مصفوفة مكونة من 10 عناصر، فإن فهرس العنصر الأول هو 0 وفهرس العنصر الأخير هو 9. المصفوفات في جافا - 3يمكنك الحصول على طول المصفوفة باستخدام متغير الطول . على سبيل المثال:
int[] myArray = new int[10]; // Create an int array for 10 elements and name it myArray
System.out.println(myArray.length); // Display the array's length, i.e. the number of elements we can put into the array
انتاج:

10

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

الآن نحن نعرف كيفية إنشاء مصفوفة في جافا. لا تحصل علينا هذه العملية على مصفوفة فارغة، بل مصفوفة مليئة بالقيم الافتراضية. على سبيل المثال، بالنسبة لمصفوفة int ، يكون هذا هو 0، وإذا كان لدينا مصفوفة من أي نوع مرجعي، فإن القيمة الافتراضية في كل خلية هي null . يمكننا الوصول إلى عنصر المصفوفة (على سبيل المثال، لتعيين قيمته، أو عرضه على الشاشة، أو إجراء بعض العمليات عليه) من خلال فهرسه. تهيئة المصفوفة هي عملية ملء مصفوفة بقيم محددة (بخلاف القيمة الافتراضية). مثال: لنقم بإنشاء مصفوفة سلسلة للفصول الأربعة ونملأها بأسماء الفصول.
String[] seasons = new String[4]; /* Declare and create an array. Java allocates memory for an array of 4 strings, and each cell is set to null (since String is a reference type) */

seasons[0] = "Winter"; /* We set the first cell, i.e. the cell with index zero, to "Winter". Here we access the zeroth element of the array and write a specific value to it. */
seasons[1] = "Spring"; // We follow a similar procedure for the cell with index 1 (the second cell)
seasons[2] = "Summer"; // ... index 2
seasons[3] = "Autumn"; // and finally, index 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]);
}
سيعرض البرنامج ما يلي:

Winter 
Spring 
Summer 
Autumn

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

ولكن ماذا لو أردنا إنشاء مصفوفة من المصفوفات ليس مصفوفة من الأرقام أو السلاسل النصية أو كائنات أخرى؟ تتيح لك جافا القيام بذلك. يُعرف نوع المصفوفة التي نعرفها بالفعل ( 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 القياسية، ويمكنك استخدامها بشكل قانوني. فيما يلي ثلاث طرق مفيدة في هذا الفصل.

فرز مصفوفة

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

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

int ثنائيSearch(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 عرض مصفوفة بسهولة دون استخدام حلقة. المثال أدناه يوضح هذا.

مثال باستخدام الفرز، وbinarySearch، وtoString

لنقم بإنشاء مصفوفة من الأعداد الصحيحة، وعرضها باستخدام toString ، وفرزها باستخدام طريقة الفرز ، ثم العثور على رقم ما فيها.
class Main {
    public static void main(String[] args) {
        int[] array = {1, 5, 4, 3, 7}; // Declare and initialize the array
        System.out.println(array); // Try to display our array without using the toString method — the result is a hexadecimal number
        System.out.println(Arrays.toString(array)); // Display the array correctly
        Arrays.sort(array, 0, 4); // Sort the entire array from the zeroth to the fourth element
        System.out.println(Arrays.toString(array)); // Display the sorted array
        int key = Arrays.binarySearch(array, 5); // Look for the number 5 in the sorted array.
        // The binarySearch method will return the index of the array element we are searching for
        System.out.println(key); // Display the index of the number we searched for
System.out.println(Arrays.binarySearch(array, 0)); // Now try to find a number that isn't in the array,
        // and immediately display the result

    }
}
انتاج:

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

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

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

المصفوفات باختصار

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

  • يجب أن يكون حجم الصفيف (عدد الخلايا) int

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

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

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

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

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

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

هل تريد معرفة المزيد عن المصفوفات؟ تحقق من المقالات أدناه. هناك الكثير من المواد المثيرة للاهتمام والمفيدة حول هذا الموضوع.
تعليقات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION