Java Core - Mảng (Array) trong java

Mảng (Array) trong java

Thông thường, mảng (array) là một tập hợp các phần tử có cùng kiểu được lưu trữ gần nhau trong bộ nhớ.

Mảng trong java là một đối tượng chứa các phần tử có kiểu dữ liệu giống nhau. Mảng là một cấu trúc dữ liệu nơi lưu trữ các phần tử giống nhau. Với mảng trong java chúng ta chỉ có thể lưu trữ một tập các phần tử có số lượng phần tử cố định.

Mảng trong java lưu các phần tử theo chỉ số, chỉ số của phần tử đầu tiên là 0.


Lợi ích của mảng trong java

  • Tối ưu code: Mảng giúp lấy hoặc sắp xếp dữ liệu dễ dàng.
  • Truy cập ngẫu nhiên: Chúng ta có thể lấy dữ liệu được lưu trữ ở bất kỳ vị trí nào thông qua chỉ số.

Sự bất tiện của mảng trong java

  • Giới hạn kích thước: Chúng ta phải khởi tạo kích thước của mảng trong java trước khi sử dụng. Không thể thay đổi được kích thước của nó lúc runtime. Collection framework được sử dụng trong java để giải quyết vấn đề này.

Các kiểu của mảng trong java

Có hai kiểu mảng trong java

  • Mảng một chiều
  • Mảng đa chiều

Mảng một chiều trong java

Các cách khai báo mảng một chiều trong java

dataType[] arr;
dataType []arr; 
dataType arr[];  

Khởi tạo mảng một chiều trong java

arrayRefVar=new datatype[size];

Ví dụ về mảng một chiều trong java

Ví dụ đơn giản về khai báo, khởi tạo và duyệt các phần tử của mảng.

public class TestArray {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		// khai báo và khởi tạo mảng
		int a[] = new int[3];
		a[0] = 10; // gán giá trị
		a[1] = 20;
		a[2] = 50;

		// in mảng ra màn hình
		for (int i = 0; i < a.length; i++) {
			System.out.print(a[i] + " ");
		}
	}

}

Kết quả:


Khai báo, khởi tạo mảng một chiều bằng mảng nặc danh

Ví dụ:

public class TestArray1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		// gán mảng nặc danh cho mảng a
		int a[] = { 33, 3, 4, 5 };

		// in mảng a ra màn hình
		for (int i = 0; i < a.length; i++)
			System.out.print(a[i] + " ");
	}

}

Kết quả:


Truyền mảng vào phương thức trong java

Chúng ta có thể truyền mảng vào phương thức, điều này giúp tái sử dụng code logic để xử lý mảng bất kỳ. Ví dụ:

public class TestArray2 {

	static void min(int arr[]) {
        int min = arr[0];
        for (int i = 1; i < arr.length; i++)
            if (min > arr[i]) {
                min = arr[i];
            }
        System.out.println(min);
    }
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int a[] = { 33, 3, 4, 5 };
        min(a);// truyền mảng tới phương thức
	}

}

Kết quả:


Mảng đa chiều trong java

Trong TH này, dữ liệu được lưu trữ theo hàng và cột theo chỉ mục (hay còn gọi là dạng ma trận).


Khai báo mảng đa chiều trong java

dataType[][] arrayRefVar;
dataType [][]arrayRefVar;
dataType arrayRefVar[][];
dataType []arrayRefVar[]; 

Ví dụ về khởi tạo và gán giá trị cho mảng đa chiều trong java

int[][] arr=new int[3][3]; // 3 hàng 3 cột
arr[0][0]=1;  
arr[0][1]=2;  
arr[0][2]=3;  
arr[1][0]=4;  
arr[1][1]=5;  
arr[1][2]=6;  
arr[2][0]=7;  
arr[2][1]=8;  
arr[2][2]=9;

Ví dụ về mảng đa chiều trong java

public class TestArray3 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		// khai báo và khởi tạo mảng 2 chiều
		int arr[][] = { { 1, 2, 3 }, { 2, 4, 5 }, { 4, 4, 5 } };

		// in mảng 2 chiều r màn hình
		for (int i = 0; i < 3; i++) {
			for (int j = 0; j < 3; j++) {
				System.out.print(arr[i][j] + " ");
			}
			System.out.println();
		}

	}

}

Kết quả:


Sao chép một mảng trong java

Chúng ta có thể sao chép một mảng tới mảng khác bởi phương thức arraycopy của lớp System. Cú pháp của phương thức arraycopy:

public static void arraycopy(  
Object src, int srcPos,Object dest, int destPos, int length  
)

Ví dụ về sao chép mảng trong java

public class TestArrayCopyDemo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		char[] copyFrom = { 'd', 'e', 'c', 'a', 'f', 'f', 'e', 'i', 'n', 'a', 't', 'e', 'd' };
		char[] copyTo = new char[7];

		System.arraycopy(copyFrom, 2, copyTo, 0, 7);
		System.out.println(new String(copyTo));
	}

}

Kết quả: