1. Khái niệm mảng (array)
Đặt vấn đề: Nhập 100 số nguyên, tính giá trị trung bình của chúng và cho biết có bao nhiêu số lớn hơn giá trị trung bình? Không khả thi nếu khai báo 100 biến. Sử dụng một cấu trúc dữ liệu gọi là mảng (array) để lưu 100 số nguyên đó.
Minh họa mảng:
Khái niệm mảng:
Mảng (array) là một cấu trúc dữ liệu biểu diễn một tập hợp các phần tử cùng kiểu dữ liệu. Trong Java, số lượng các phần tử trong mảng phải được xác định trước và không thay đổi.
2. Khai báo và khởi tạo mảng một chiều
Cú pháp khai báo mảng một chiều:
elementType[] arrayRefVar;
hoặc:
elementType arrayRefVar[];
Trong đó, elementType có thể là kiểu dữ liệu nguyên thủy như int, char, double, byte,… hoặc các lớp (class) trong Java. arrayRefVar là tên mảng, có quy ước đặt tên giống tên biến.
Ví dụ, khai báo một biến mảng myList lưu trữ các phần tử double:
double[] myList;
//hoặc
double myList[];
String[] array;
Nhưng có bao nhiêu phần tử trong mảng?
Để khai báo số phần tử có trong mảng, chúng ta cần phải cấp phát vùng nhớ cho mảng tương ứng với số phần tử mà có thể lưu trữ. Cú pháp:
arrayRefVar = new elementType[arraySize];
Sử dụng từ khóa new để cấp phát vùng nhớ cho mảng. Số vùng nhớ được cấp phát là arraySize, mỗi vùng nhớ có thể lưu trữ một giá trị kiểu elementType. Sau đó, gán mảng vừa tạo vào biến tham chiếu arrayRefVar.
Ví dụ:
myList = new double[10];
myList[0] tham chiếu phần tử đầu tiên của mảng. myList[9] tham chiếu phần tử cuối cùng của mảng.
Có thể khai báo và cấp phát vùng nhớ cho mảng trong một câu lệnh
Cú pháp:
elementType[] arrayRefVar = new elementType[arraySize];
hoặc
elementType arrayRefVar[] = new elementType[arraySize];
Ví dụ:
double[] myList = new double[10];
double myList[] = new double[10];
String[] array = new String[100];
Khởi tạo mảng một chiều
Tức là gán giá trị cho các phần tử trong mảng một chiều. Trong Java, có thể khởi tạo mảng trong lúc khai báo mảng. Ví dụ:
//khai báo và khởi tạo mảng
int[] age = {12, 4, 5, 2, 5};
Ở ví dụ trên, chúng ta tạo ra một mảng tên là age và khởi tạo các phần tử của mảng trong dấu ngoặc nhọn {}. Với cách này, chúng ta không cần khai báo số phần tử trong mảng. Trình biên dịch Java sẽ tự động xác định được số phần tử trong mảng là 5.
Trong Java, mỗi vùng nhớ tương ứng với mỗi phần tử trong mảng được đánh một chỉ mục (index). Chúng ta có thể khởi tạo mảng bằng việc xác định các chỉ mục này. Ví dụ:
//khai báo một mảng
int[] age = new int[5];
//khởi tạo mảng
age[0] = 12;
age[1] = 4;
age[2] = 5;
..
Lưu ý:
Chỉ mục (index) của mảng luôn bắt đầu từ 0. Phần tử đầu tiên trong mảng có index = 0.
Nếu kích thước của mảng là n thì phần tử cuối cùng trong mảng sẽ có index = n-1.
3. Kích thước mảng và giá trị mặc định trong mảng
Khi một mảng được cấp phát, số lượng phần tử mảng là cố định và không thể thay đổi. Để lấy kích thước mảng, chúng ta dùng arrayRefVar.lenght.
Ví dụ, myList.lenght = 10
.
Khi một mảng được tạo, giá trị các phần tử mảng được gán một giá trị mặc định: 0 nếu kiểu số, \u0000 nếu kiểu char và false nếu kiểu boolean.
4. Truy cập các phần tử trong mảng
Các phần tử của mảng được truy cập thông qua chỉ mục (index). Bắt đầu là 0, nghĩa là từ phần tử thứ 0 đến arrayRefVar.length-1.
Ví dụ, myList có 10 phần tử kiểu double có chỉ số từ 0 đến 9.
Cú pháp:
arrayRefVar[index];
Ví dụ:
double[] myList = {2.0, 2.1, 0.0, 1.0, 3.2, 4.5, 9.9, 5.7, 5.8, 1.2};
System.out.println(myList[0]);//2.0
Bài này đã giới thiệu cách khai báo, cấp phát vùng nhớ cho mảng cũng như khởi tạo mảng. Bài sau, chúng ta sẽ tìm hiểu một số kỹ thuật lập trình với mảng 1 chiều trong Java.