آرایه در جاوا

آموزش آرایه ها در جاوا (array in java)

آرایه یک شی کانتینری است که تعداد ثابتی از مقادیر یک نوع واحد را در خود نگه می دارد. طول یک آرایه با ایجاد آرایه مشخص می شود. پس از ایجاد، طول آن ثابت می شود. آرایه‌ها هم به شکل یک بعدی و هم به شکل چند بعدی می‌توانند تعریف شوند. آرایه در جاوا به شکل متفاوتی از زبان‌های C و C++ است به طوری که طول آرایه برخلاف C و C++ که با sizeof به دست می‌آمد در جاوا با Length به دست می‌آید.

زمان مطالعه: 3 دقیقه
بازدید: 1190
پرسش و پاسخ: 0

تعریف آرایه در جاوا

آرایه در جاوا گروهی از متغیرهای هم نوع هستند که با یک نام مشترک به آنها اشاره می شود. آرایه ها در جاوا متفاوت از C/C++ کار می کنند. در ادامه چند نکته مهم در مورد آرایه های جاوا آورده شده است.

  • در جاوا، همه آرایه ها به صورت پویا تخصیص داده می شوند.
  • آرایه ها در حافظه پیوسته [مکان حافظه متوالی] ذخیره می شوند.
  • از آنجایی که آرایه ها در جاوا اشیا هستند، می توانیم طول آنها را با استفاده از ویژگی شی length پیدا کنیم. این با C/C++ متفاوت است، جایی که طول را با استفاده از sizeof می‌یابیم.
  • یک متغیر آرایه جاوا نیز می تواند مانند سایر متغیرها با [] بعد از نوع داده اعلام شود.
  • متغیرهای آرایه مرتب شده اند و هر کدام دارای شاخصی (Index) هستند که با 0 شروع می شود.
  • آرایه جاوا همچنین می تواند به عنوان یک فیلد ثابت، یک متغیر محلی یا یک پارامتر متد استفاده شود.
  • اندازه یک آرایه باید با مقدار int یا short مشخص شود.
  • سوپرکلاس مستقیم یک نوع آرایه Object است.
  • هر نوع آرایه رابط های Cloneable و java.io.Serializable را پیاده سازی می کند.
  • این ذخیره سازی آرایه ها به ما کمک می کند تا به طور تصادفی به عناصر یک آرایه دسترسی داشته باشیم [Support Random Access].
  • اندازه آرایه را نمی توان تغییر داد (پس از شروع اولیه). با این حال، یک ارجاع آرایه می تواند برای اشاره به آرایه دیگری ایجاد شود.

یک آرایه بسته به تعریف آرایه می تواند حاوی نوع اولیه (int، char و غیره) و شی (یا non-primitive) یک کلاس باشد. در مورد انواع داده های اولیه، مقادیر واقعی در مکان های حافظه پیوسته ذخیره می شوند. در مورد اشیاء کلاس، اشیاء واقعی در بخش پشته(Stack) ذخیره می شوند.

تعریف آرایه در جاوا

ایجاد، مقداردهی اولیه و دسترسی به یک آرایه در جاوا

آرایه های تک بعدی در جاوا

شکل کلی یک اعلان آرایه یک بعدی به صورت زیر است.

type var-name[];
OR
type[] var-name;

اعلان آرایه دو جزء دارد: type و name. type نوع عنصر آرایه را اعلام می کند. نوع عنصر نوع داده هر عنصری که آرایه را تشکیل می دهد را تعیین می کند. مانند آرایه‌ای از اعداد صحیح، می‌توانیم آرایه‌ای از انواع داده‌های ابتدایی دیگر مانند char، float، double و غیره یا انواع داده‌های تعریف‌شده توسط کاربر (اشیاء یک کلاس) ایجاد کنیم. بنابراین، نوع عنصر برای آرایه تعیین می کند که آرایه چه نوع داده ای را نگه می دارد.

مثال:

// both are valid declarations
int intArray[]; 
or int[] intArray; 

byte byteArray[];
short shortsArray[];
boolean booleanArray[];
long longArray[];
float floatArray[];
double doubleArray[];
char charArray[];

// an array of references to objects of
// the class MyClass (a class created by
// user)
MyClass myClassArray[]; 

Object[]  ao,        // array of Object
Collection[] ca;  // array of Collection
                     // of unknown type

اگرچه اولین اعلان ثابت می کند که intArray یک متغیر آرایه است، هیچ آرایه واقعی وجود ندارد. فقط به کامپایلر می گوید که این متغیر (intArray) آرایه ای از نوع عدد صحیح را نگه می دارد. برای پیوند int آرایه با یک آرایه فیزیکی واقعی از اعداد صحیح، باید یکی از آن‌ها را با استفاده از new به آرایه int اختصاص دهید.

نمونه سازی یک آرایه در جاوا : هنگامی که یک آرایه اعلام می شود، تنها مرجع یک آرایه ایجاد می شود. برای ایجاد یا دادن حافظه به آرایه، یک آرایه به این صورت ایجاد می کنید: شکل کلی new همانطور که برای آرایه های یک بعدی اعمال می شود به صورت زیر ظاهر می شود:

var-name = new type [size];

در اینجا type نوع داده های تخصیص داده شده را مشخص می کند، اندازه تعداد عناصر آرایه را تعیین می کند و var-name نام متغیر آرایه ای است که به آرایه پیوند داده شده است. برای استفاده از new برای تخصیص یک آرایه، باید نوع و تعداد عناصر را برای تخصیص مشخص کنید.

مثال:

int intArray[];    //declaring array
intArray = new int[20];  // allocating memory to array

یا به صورت زیر:

int[] intArray = new int[20]; // combining both statements in one

نکته: عناصر موجود در آرایه اختصاص داده شده توسط new به طور خودکار به صفر (برای انواع عددی)، false (برای بولی)، یا تهی (برای انواع رشته ای) مقدار دهی اولیه می شوند.

نکته: به دست آوردن آرایه یک فرآیند دو مرحله ای است. ابتدا باید متغیری از نوع آرایه مورد نظر را اعلام کنید. دوم، باید حافظه را برای نگهداری آرایه با استفاده از new اختصاص دهید و آن را به متغیر آرایه اختصاص دهید. بنابراین، در جاوا، همه آرایه ها به صورت پویا تخصیص داده می شوند.

Array Literal : در شرایطی که اندازه آرایه و متغیرهای آرایه از قبل مشخص است، می توان از Array Literal استفاده کرد. 

int[] intArray = new int[]{ 1,2,3,4,5,6,7,8,9,10 }; 
 // Declaring array literal
  • طول این آرایه تعیین کننده طول آرایه ایجاد شده است.
  • نیازی به نوشتن new int[] در آخرین نسخه های جاوا نیست.

دسترسی به عناصر آرایه جاوا با استفاده از حلقهfor  : هر عنصر در آرایه از طریق شاخص(Index) خود قابل دسترسی است. این شاخص با 0 شروع می شود و به (اندازه کل آرایه) - 1 ختم می شود. با استفاده از حلقه for جاوا می توان به تمام عناصر آرایه دسترسی داشت.

// accessing the elements of the specified array
for (int i = 0; i < arr.length; i++)
  System.out.println("Element at index " + i + 
                                " : "+ arr[i]);

پیاده سازی:

// Java program to illustrate creating an array
// of integers,  puts some values in the array,
// and prints each value to standard output.
 
class GFG {
    public static void main(String[] args)
    {
        // declares an Array of integers.
        int[] arr;
 
        // allocating memory for 5 integers.
        arr = new int[5];
 
        // initialize the first elements of the array
        arr[0] = 10;
 
        // initialize the second elements of the array
        arr[1] = 20;
 
        // so on...
        arr[2] = 30;
        arr[3] = 40;
        arr[4] = 50;
 
        // accessing the elements of the specified array
        for (int i = 0; i < arr.length; i++)
            System.out.println("Element at index " + i
                               + " : " + arr[i]);
    }
}

خروجی:

Element at index 0 : 10
Element at index 1 : 20
Element at index 2 : 30
Element at index 3 : 40
Element at index 4 : 50

همچنین می توانید با استفاده از هر حلقه for each به آرایه های جاوا دسترسی داشته باشید.

آرایه در جاوا تک بعدی

آرایه های objects : آرایه ای از اشیاء مانند آرایه ای از اقلام داده از نوع اولیه به روش زیر ایجاد می شود.

Student[] arr = new Student[5]; //student is a user-defined class

سینتکس:

data type[] arrName;
datatype arrName[];
datatype [] arrName;

مثال:

import java.io.*;
 
class GFG {
    public static void main (String[] args) {
        
      int [] arr=new int [4];
      // 4 is the size of arr
    }
}

مثال:

// Java program to illustrate creating
//  an array of objects
 
class Student {
    public int roll_no;
    public String name;
    Student(int roll_no, String name)
    {
        this.roll_no = roll_no;
        this.name = name;
    }
}
 
// Elements of the array are objects of a class Student.
public class GFG {
    public static void main(String[] args)
    {
        // declares an Array of integers.
        Student[] arr;
 
        // allocating memory for 5 objects of type Student.
        arr = new Student[5];
 
        // initialize the first elements of the array
        arr[0] = new Student(1, "aman");
 
        // initialize the second elements of the array
        arr[1] = new Student(2, "vaibhav");
 
        // so on...
        arr[2] = new Student(3, "shikar");
        arr[3] = new Student(4, "dharmesh");
        arr[4] = new Student(5, "mohit");
 
        // accessing the elements of the specified array
        for (int i = 0; i < arr.length; i++)
            System.out.println("Element at " + i + " : "
                               + arr[i].roll_no + " "
                               + arr[i].name);
    }
}

خروجی:

Element at 0 : 1 aman
Element at 1 : 2 vaibhav
Element at 2 : 3 shikar
Element at 3 : 4 dharmesh
Element at 4 : 5 mohit

آرایه Student شامل پنج فضای حافظه هر کدام به اندازه کلاس Student است که آدرس پنج شی Student را می توان در آن ذخیره کرد. اشیاء Student باید با استفاده از سازنده کلاس Student نمونه سازی شوند و ارجاعات آنها باید به صورت بالا به عناصر آرایه اختصاص داده شود.

مثال: آرایه ای از objectها نیز مانند زیر است

// Java program to illustrate creating
//  an array of objects
   
class Student
{
    
    public String name;
    Student(String name)
    {
        this.name = name;
    }
      @Override
    public String toString(){
        return name;
    }
}
   
// Elements of the array are objects of a class Student.
public class GFG
{
    public static void main (String[] args)
    {
           // declares an Array and initializing  the elements of the array
        Student[] myStudents = new Student[]{new Student("Dharma"),new Student("sanvi"),new Student("Rupa"),new Student("Ajay")};
   
        // accessing the elements of the specified array
        for(Student m:myStudents){   
            System.out.println(m);
        }
    }
}

خروجی:

Dharma
sanvi
Rupa
Ajay

اگر بخواهیم به عناصر خارج از اندازه آرایه دسترسی پیدا کنیم چه اتفاقی می افتد؟

JVM، ArrayIndexOutOfBoundsException را پرتاب می کند تا نشان دهد که آرایه با یک نمایه غیرقانونی دسترسی پیدا کرده است. این شاخص یا منفی است یا بزرگتر یا مساوی اندازه یک آرایه است.

کد زیر نشان می دهد که اگر بخواهیم به عناصر خارج از اندازه آرایه دسترسی پیدا کنیم چه اتفاقی می افتد.

// Code for showing error "ArrayIndexOutOfBoundsException"
 
public class GFG {
    public static void main(String[] args)
    {
        int[] arr = new int[4];
        arr[0] = 10;
        arr[1] = 20;
        arr[2] = 30;
        arr[3] = 40;
 
        System.out.println(
            "Trying to access element outside the size of array");
        System.out.println(arr[5]);
    }
}

خروجی:

Trying to access element outside the size of array
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 4
at GFG.main(GFG.java:13)

مثال:

public class GFG {
    public static void main(String[] args)
    {
        int[] arr = new int[2];
        arr[0] = 10;
        arr[1] = 20;
 
        for (int i = 0; i < arr.length; i++)
            System.out.println(arr[i]);
    }
}

خروجی:

10
20

آرایه های چند بعدی در جاوا

آرایه های چند بعدی آرایه هایی از آرایه ها هستند که هر عنصر آرایه مرجع آرایه های دیگر را نگه می دارد. به این آرایه‌های ناهموار نیز می‌گویند. یک آرایه چند بعدی با اضافه کردن یک مجموعه از براکت های مربع ([]) در هر بعد ایجاد می شود.

سینتکس:

datatype [][] arrayrefvariable;
datatype arrayrefvariable[][];
import java.io.*;
 
class GFG {
    public static void main (String[] args) {
      // Syntax
       int [][] arr= new int[3][3];
      // 3 row and 3 column
    }
}

int[][] intArray = new int[10][20]; //a 2D array or matrix
int[][][] intArray = new int[10][20][10]; //a 3D array

مثال:

public class multiDimensional {
    public static void main(String args[])
    {
        // declaring and initializing 2D array
        int arr[][]
            = { { 2, 7, 9 }, { 3, 6, 1 }, { 7, 4, 2 } };
 
        // printing 2D array
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 3; j++)
                System.out.print(arr[i][j] + " ");
 
            System.out.println();
        }
    }
}

خروجی:

2 7 9 
3 6 1 
7 4 2 

پاس دادن آرایه ها به متدها : مانند متغیرها، می توانیم آرایه ها را نیز به متدها منتقل کنیم. برای مثال، برنامه زیر برای محاسبه مجموع مقادیر آرایه، آرایه را به متد sum ارسال می کند.

// Java program to demonstrate
// passing of array to method
 
public class Test {
    // Driver method
    public static void main(String args[])
    {
        int arr[] = { 3, 1, 2, 5, 4 };
 
        // passing array to method m1
        sum(arr);
    }
 
    public static void sum(int[] arr)
    {
        // getting sum of array values
        int sum = 0;
 
        for (int i = 0; i < arr.length; i++)
            sum += arr[i];
 
        System.out.println("sum of array values : " + sum);
    }
}

خروجی:

sum of array values : 15

برگرداندن آرایه ها از متد ها : طبق معمول، یک متد همچنین می تواند یک آرایه را برگرداند. به عنوان مثال، برنامه زیر یک آرایه از روش m1 برمی گرداند.

// Java program to demonstrate
// return of array from method
 
class Test {
    // Driver method
    public static void main(String args[])
    {
        int arr[] = m1();
 
        for (int i = 0; i < arr.length; i++)
            System.out.print(arr[i] + " ");
    }
 
    public static int[] m1()
    {
        // returning  array
        return new int[] { 1, 2, 3 };
    }
}

خروجی:

1 2 3 

Class Objects برای آرایه ها : هر آرایه دارای یک شی Class مرتبط است که با همه آرایه های دیگر با همان نوع جزء مشترک است.

مثال:

// Java program to demonstrate
// Class Objects for Arrays
 
class Test {
    public static void main(String args[])
    {
        int intArray[] = new int[3];
        byte byteArray[] = new byte[3];
        short shortsArray[] = new short[3];
 
        // array of Strings
        String[] strArray = new String[3];
 
        System.out.println(intArray.getClass());
        System.out.println(
            intArray.getClass().getSuperclass());
        System.out.println(byteArray.getClass());
        System.out.println(shortsArray.getClass());
        System.out.println(strArray.getClass());
    }
}

خروجی:

class [I
class java.lang.Object
class [B
class [S
class [Ljava.lang.String;

توضیحات:

  1. رشته «[I» امضای نوع زمان اجرا برای شی کلاس «آرایه با نوع مؤلفه int» است.
  2. تنها سوپرکلاس مستقیم از نوع آرایه java.lang.Object است.
  3. رشته "[B" امضای نوع زمان اجرا برای شی کلاس "آرایه با نوع مولفه byte" است.
  4. رشته "[S" امضای نوع زمان اجرا برای شی کلاس "آرایه با نوع مولفه short" است.
  5. رشته "[L" امضای نوع زمان اجرا برای شی کلاس "آرایه با نوع مولفه یک class" است. سپس به دنبال آن نام کلاس می‌آید.

اعضای آرایه : حال همانطور که می دانید آرایه ها اشیاء یک کلاس هستند و سوپرکلاس مستقیم آرایه ها یک کلاس Object هستند. اعضای یک نوع آرایه همه موارد زیر هستند:

  • طول فیلد نهایی عمومی شامل تعداد اجزای آرایه است. طول ممکن است مثبت یا صفر باشد.
  • همه اعضا از کلاس Object به ارث برده می شوند. تنها روش Object که به ارث نمی رسد، روش کلون آن است.
  • متد عمومی () clone متد clone را در کلاس Object لغو می کند و هیچ استثنای بررسی شده ای ایجاد نمی کند.

انواع آرایه ها و انواع عناصر مجاز آنها در جاوا

انواع آرایه ها و انواع عناصر مجاز آن‌ها
انواع آرایه انواع عنصر مجاز
Primitive Type Arrays هر نوع که می تواند به طور ضمنی به نوع اعلام شده ارتقا یابد.
Object Type Arrays یا اشیاء نوع اعلام شده یا اشیاء کلاس فرزند.
Abstract Class Type Arrays اشیاء کلاس فرزند آن مجاز است.
Interface Type Arrays اشیاء کلاس پیاده سازی آن مجاز هستند.

شبیه سازی آرایه ها : هنگامی که یک آرایه تک بعدی، مانند Object[] را شبیه سازی می کنید، یک " deep copy" با آرایه جدید که حاوی کپی هایی از عناصر آرایه اصلی به جای ارجاع است، انجام می شود.

مثال:

// Java program to demonstrate
// cloning of one-dimensional arrays
 
class Test {
    public static void main(String args[])
    {
        int intArray[] = { 1, 2, 3 };
 
        int cloneArray[] = intArray.clone();
 
        // will print false as deep copy is created
        // for one-dimensional array
        System.out.println(intArray == cloneArray);
 
        for (int i = 0; i < cloneArray.length; i++) {
            System.out.print(cloneArray[i] + " ");
        }
    }
}

خروجی:

false
1 2 3 

شبیه سازی آرایه ها در جاوا

یک کلون از یک آرایه چند بعدی (مانند Object[][]) یک "shallow copy" است، با این حال، به این معنی است که تنها یک آرایه جدید را با هر آرایه عنصری ارجاع به یک آرایه عنصر اصلی ایجاد می کند، اما زیرآرایه ها به اشتراک گذاشته می شوند.

مثال:

// Java program to demonstrate
// cloning of multi-dimensional arrays
 
class Test {
    public static void main(String args[])
    {
        int intArray[][] = { { 1, 2, 3 }, { 4, 5 } };
 
        int cloneArray[][] = intArray.clone();
 
        // will print false
        System.out.println(intArray == cloneArray);
 
        // will print true as shallow copy is created
        // i.e. sub-arrays are shared
        System.out.println(intArray[0] == cloneArray[0]);
        System.out.println(intArray[1] == cloneArray[1]);
    }
}

خروجی:

false
true
true

شبیه سازی آرایه ها در جاوا

بهزاد میرزازاده
مسیر درست با پرسش های درست ساخته می شود

مشاهده تمام مطالب نویسنده