מערכים רב מימדיים בג'אווה

1. סקירה כללית

מערך רב מימדי בג'אווה הוא מערך הכולל מערכים בגדלים שונים כאלמנטים שלו. זה מכונה גם "מערך מערכים" או "מערך מרופט" או "מערך משונן".

במדריך מהיר זה, נבחן לעומק יותר את ההגדרה והעבודה עם מערכים רב מימדיים.

2. יצירת מערך רב מימדי

נתחיל בבדיקת דרכים בהן אנו יכולים ליצור מערך רב מימדי:

2.1. טופס הקצר

דרך קלה להגדיר מערך רב מימדי תהיה:

int [] [] multiDimensionalArr = {{1, 2}, {3, 4, 5}, {6, 7, 8, 9}};

הנה, הכרזנו ואותחלנו רב מימדי בצעד יחיד.

2.2. הצהרה ואז אתחול

אנו מתחילים בהכרזה על מערך רב מימדי בגודל שלוש:

int [] [] multiDimensionalArr = int int [3] [];

פה, השמטנו לציין את הממד השני מכיוון שהוא ישתנה.

לאחר מכן, בואו נתקדם רחוק יותר על ידי הכרזה וניתוח של האלמנטים המתאימים רב מימדי:

multiDimensionalArr [0] = int int [] {1, 2}; multiDimensionalArr [1] = int int [] {3, 4, 5}; multiDimensionalArr [2] = int int [] {6, 7, 8, 9};

אנחנו יכולים גם להכריז על האלמנטים שלה בלי לאתחל אותם:

multiDimensionalArr [0] = int int [2]; multiDimensionalArr [1] = int int [3]; multiDimensionalArr [2] = int int [4];

לאחר מכן ניתן לאתחל את אלה, למשל באמצעות קלט משתמשים.

אנחנו יכולים גם להשתמש ב- java.util.Arays.fill שיטה לאתחול אלמנטים במערך:

void initialize2DArray (int [] [] multiDimensionalArray) {for (int [] array: multiDimensionalArray) {Arrays.fill (array, 7); }} 

כל האלמנטים במערכים מאותחלים עם אותו ערך.

3. ייצוג זיכרון

איך ייצוג הזיכרון של שלנו רב מימדי נראה כמו?

כידוע, מערך בג'אווה אינו אלא אובייקט, שרכיביו יכולים להיות פרימיטיביים או הפניות. לכן, ניתן לחשוב על מערך דו-ממדי בג'אווה כמערך של מערכים חד-ממדיים.

שֶׁלָנוּ רב מימדי בזיכרון ייראה דומה ל:

בְּבִירוּר, רב מימדי[0] מחזיקה הפניה למערך חד ממדי בגודל 2, רב ממדי [1] מחזיקה התייחסות למערך חד-ממדי אחר בגודל 3 וכן הלאה.

בדרך זו ג'אווה מאפשרת לנו להגדיר ולהשתמש במערכים רב מימדיים.

4. התבוססות על אלמנטים

אנו יכולים לחזור על מערך רב מימדי בדומה לכל מערך אחר בג'אווה.

בואו ננסה לאתחל ולאתחל את רב מימדי אלמנטים המשתמשים בכניסות משתמש:

void initializeElements (int [] [] multiDimensionalArr) {Scanner sc = Scanner new (System.in); עבור (int חיצוני = 0; חיצוני <multiDimensionalArr.length; חיצוני ++) {עבור (int פנימי = 0; פנימי <multiDimensionalArr [חיצוני] .length; פנימי ++) {multiDimensionalArr [חיצוני] [פנימי] = sc.nextInt (); }}}

פה, multiDimensionalArr [חיצוני] .length הוא אורכו של מערך באינדקס חִיצוֹנִי ב רב מימדי.

זה עוזר לנו להבטיח שאנחנו מחפשים אלמנטים רק בטווח תקף של כל מערך משנה, ובכך להימנע מ- ArrayIndexOutOfBoundException.

5. אלמנטים להדפסה

מה אם נרצה להדפיס את האלמנטים של המערך הרב-ממדי שלנו?

דרך ברורה אחת תהיה להשתמש בהיגיון האיטרציה שכבר כיסינו. זה כולל איטרציה דרך כל פריט בתוך המערך הרב מימדי שלנו, שהוא עצמו מערך, ואז איטרציה על אותו מערך ילדים - אלמנט אחד בכל פעם.

אפשרות נוספת שיש לנו היא להשתמש java.util.Arrays.toString () שיטת עוזר:

בטל printElements (int [] [] multiDimensionalArr) {for (int index = 0; index <multiDimensionalArr.length; index ++) {System.out.println (Arrays.toString (multiDimensionalArr [index])); }}

ובסופו של דבר יש לנו קוד נקי ופשוט. פלט המסוף שנוצר ייראה כך:

[1, 2] [3, 4, 5] [6, 7, 8, 9]

6. אורך האלמנטים

אנו יכולים למצוא את אורך המערכים במערך רב מימדי על ידי איטרציה מעל המערך הראשי:

int [] findLengthOfElements (int [] [] multidimensionalArray) {int [] arrayOfLengths = new int [multiDimensionalArray.length]; עבור (int i = 0; i <multiDimensionalArray.length; i ++) {arrayOfLengths [i] = multiDimensionalArray [i] .length; } להחזיר arrayOfLengths; }

אנו יכולים למצוא גם את אורך המערכים באמצעות זרמי Java:

מספר שלם [] findLengthOfArrays (int [] [] multiDimensionalArray) {return Arrays.stream (multiDimensionalArray) .map (array -> array.length) .toArray (Integer [] :: new); }

7. העתק מערך דו-ממדי

אנו יכולים להעתיק מערך דו-ממדי באמצעות ה- Arrays.copyOf שיטה:

int [] [] copy2DArray (int [] [] arrayOfArrays) {int [] [] copied2DArray = int int [arrayOfArrays.length] []; עבור (int i = 0; i <arrayOfArrays.length; i ++) {int [] array = arrayOfArrays [i]; copied2DArray [i] = Arrays.copyOf (מערך, מערך.אורך); } להחזיר copied2DArray; }

אנו יכולים להשיג זאת גם באמצעות זרמי Java:

מספר שלם [] [] copy2DArray (מספר שלם [] [] arrayOfArrays) {return Arrays.stream (arrayOfArrays) .map (array -> Arrays.copyOf (array, array.length)) .toArray (Integer [] [] :: new ); }

8. מסקנה

במאמר זה בדקנו מהם מערכים רב מימדיים, כיצד הם נראים בזיכרון והדרכים בהן אנו יכולים להגדיר ולהשתמש בהם.

כמו תמיד, ניתן למצוא את קוד המקור של הדוגמאות המוצגות באתר GitHub.


$config[zx-auto] not found$config[zx-overlay] not found