Wednesday, January 27, 2021

Tìm hiểu Array trong java

 Java cung cấp một cấu trúc dữ liệu, mảng, lưu trữ một tập hợp tuần tự có kích thước cố định của các phần tử cùng kiểu. Mảng trong java được sử dụng để lưu trữ một tập hợp dữ liệu, nhưng thường hữu ích hơn nếu coi một mảng là một tập hợp các biến cùng kiểu.

Thay vì khai báo các biến riêng lẻ, chẳng hạn như number0, number1, ... và number99, bạn khai báo một biến mảng chẳng hạn như số và sử dụng số [0], số [1] và ..., số [99] để biểu diễn các biến riêng lẻ.

Array trong java

Hướng dẫn này giới thiệu cách khai báo biến mảng, tạo mảng và xử lý mảng bằng cách sử dụng các biến được lập chỉ mục.

Khai báo biến mảng

Để sử dụng mảng trong chương trình, bạn phải khai báo một biến để tham chiếu đến mảng và bạn phải chỉ định kiểu mảng mà biến có thể tham chiếu. Đây là cú pháp để khai báo một biến mảng

Cú pháp:

dataType[] arrayRefVar;

or

dataType arrayRefVar[];

Lưu ý - Kiểu dataType [] arrayRefVar được ưu tiên. Kiểu dataType arrayRefVar [] xuất phát từ ngôn ngữ C / C ++ và được sử dụng trong Java để phù hợp với các lập trình viên C / C ++.

Ví dụ:

double[] myList;

or

double myList[];

Cú pháp tạo mảng trong java

Bạn có thể tạo mảng bằng cách sử dụng những toán tử vơi những cú pháp:

arrayDemo = new DataType[size]

  • Tạo mảng bằng cách sử dụng kiểu dữ liệu
  • Gắn tham chiếu của mảng tạo biến

Khai báo một biến mảng, tạo một mảng và gán tham chiếu của mảng cho biến có thể được kết hợp trong một câu lệnh, như hình dưới đây:

dataType[] arrayRefVar = new dataType[arraySize];

Ngoài ra, bạn có thể tạo các mảng như sau:

dataType[] arrayRefVar = {value0, value1, ..., valuek};

Các phần tử mảng được truy cập thông qua chỉ mục . Chỉ số mảng dựa trên 0; nghĩa là chúng bắt đầu từ 0 đến arrayRefVar.length-1 .

Thí dụ

Câu lệnh sau khai báo một biến mảng, myList, tạo một mảng gồm 10 phần tử kiểu kép và gán tham chiếu của nó cho myList:

double[] myList = new double[10];

Hình sau đại diện cho mảng myList. Ở đây, myList chứa mười giá trị kép và các chỉ số từ 0 đến 9.

Xử lý mảng trong java

Khi xử lý các phần tử của mảng, chúng ta thường sử dụng vòng lặp for hoặc vòng lặp foreach vì tất cả các phần tử trong một mảng đều có cùng kiểu và kích thước của mảng đã biết.

Thí dụ

Đây là một ví dụ hoàn chỉnh cho thấy cách tạo, khởi tạo và xử lý mảng

public class TestArray {


   public static void main(String[] args) {

      double[] myList = {1.9, 2.9, 3.4, 3.5};


      // Print all the array elements

      for (int i = 0; i < myList.length; i++) {

         System.out.println(myList[i] + " ");

      }

     

      // Summing all elements

      double total = 0;

      for (int i = 0; i < myList.length; i++) {

         total += myList[i];

      }

      System.out.println("Total is " + total);

      

      // Finding the largest element

      double max = myList[0];

      for (int i = 1; i < myList.length; i++) {

         if (myList[i] > max) max = myList[i];

      }

      System.out.println("Max is " + max);  

   }

}

Đầu ra

1.9

2.9

3.4

3.5

Total is 11.7

Max is 3.5

Sử dụng vòng lặp foreach trong Array

JDK 1.5 đã giới thiệu một vòng lặp for mới được gọi là vòng lặp foreach hoặc vòng lặp for nâng cao, cho phép bạn duyệt toàn bộ mảng một cách tuần tự mà không cần sử dụng biến chỉ mục.

Thí dụ

Đoạn mã sau hiển thị tất cả các phần tử trong mảng myList:

public class TestArray {


   public static void main(String[] args) {

      double[] myList = {1.9, 2.9, 3.4, 3.5};


      // Print all the array elements

      for (double element: myList) {

         System.out.println(element);

      }

   }

}

Điều này sẽ tạo ra kết quả sau:

Đầu ra

1.9

2.9

3.4

3.5

Truyền Mảng cho các Phương thức

Cũng giống như bạn có thể truyền các giá trị kiểu nguyên thủy cho các phương thức, bạn cũng có thể truyền mảng cho các phương thức. Ví dụ: phương thức sau đây hiển thị các phần tử trong một mảng int 

Thí dụ

public static void printArray(int[] array) {

   for (int i = 0; i < array.length; i++) {

      System.out.print(array[i] + " ");

   }

}

Bạn có thể gọi nó bằng cách truyền một mảng. Ví dụ: câu lệnh sau gọi phương thức printArray để hiển thị 3, 1, 2, 6, 4 và 2 -

Thí dụ

printArray(new int[]{3, 1, 2, 6, 4, 2});

Trả về một mảng từ một phương thức

Một phương thức cũng có thể trả về một mảng. Ví dụ: phương thức sau đây trả về một mảng là sự đảo ngược của một mảng khác:

Thí dụ

public static int[] reverse(int[] list) {

   int[] result = new int[list.length];


   for (int i = 0, j = result.length - 1; i < list.length; i++, j--) {

      result[j] = list[i];

   }

   return result;

}

Class Mảng

Lớp java.util.Arrays chứa các phương thức tĩnh khác nhau để sắp xếp và tìm kiếm mảng, so sánh các mảng và điền vào các phần tử của mảng. Các phương thức này được nạp chồng cho tất cả các kiểu nguyên thủy.

public static int binarySearch(Object[] a, Object key)

Tìm kiếm mảng Đối tượng được chỉ định (Byte, Int, double, v.v.) cho giá trị được chỉ định bằng cách sử dụng thuật toán tìm kiếm nhị phân. Mảng phải được sắp xếp trước khi thực hiện cuộc gọi này. Điều này trả về chỉ mục của khóa tìm kiếm, nếu nó có trong danh sách; nếu không, nó trả về (- (điểm chèn + 1)).

public static boolean equals(long[] a, long[] a2)

Trả về true nếu hai mảng độ dài được chỉ định bằng nhau. Hai mảng được coi là bằng nhau nếu cả hai mảng chứa cùng số phần tử và tất cả các cặp phần tử tương ứng trong hai mảng đều bằng nhau. Điều này trả về true nếu hai mảng bằng nhau. Tất cả các kiểu dữ liệu nguyên thủy khác có thể sử dụng cùng một phương pháp (Byte, short, Int, v.v.)

public static void fill(int[] a, int val)

Gán giá trị int đã chỉ định cho mỗi phần tử của mảng int được chỉ định. Phương pháp tương tự có thể được sử dụng bởi tất cả các kiểu dữ liệu nguyên thủy khác (Byte, short, Int, v.v.)

public static void sort(Object[] a)

Sắp xếp mảng đối tượng được chỉ định theo thứ tự tăng dần, theo thứ tự tự nhiên của các phần tử của nó. Phương pháp tương tự có thể được sử dụng bởi tất cả các kiểu dữ liệu nguyên thủy khác (Byte, short, Int, v.v.)

Làm thế nào để khởi tạo mảng trong Java?

Trong Java, chúng ta có thể khởi tạo mảng trong quá trình khai báo

//declare and initialize and array

int[] age = {12, 4, 5, 2, 5};

Ở đây, chúng ta đã tạo một mảng có tên age và khởi tạo nó với các giá trị bên trong dấu ngoặc nhọn.

Lưu ý rằng chúng tôi chưa cung cấp kích thước của mảng. Trong trường hợp này, trình biên dịch Java tự động chỉ định kích thước bằng cách đếm số phần tử trong mảng (tức là 5).

Trong mảng Java, mỗi vị trí bộ nhớ được liên kết với một số. Số được gọi là chỉ số mảng. Chúng ta cũng có thể khởi tạo mảng trong Java, sử dụng số chỉ mục. Ví dụ,

// declare an array

int[] age = new int[5];

// initialize array

age[0] = 12;

age[1] = 4;

age[2] = 5;

Ghi chú:

Chỉ số mảng luôn bắt đầu từ 0. Nghĩa là, phần tử đầu tiên của mảng ở chỉ số 0.

Nếu kích thước của một mảng là n, thì phần tử cuối cùng của mảng sẽ ở chỉ số n-1.

Làm thế nào để truy cập các phần tử của một mảng trong Java?

Chúng ta có thể truy cập phần tử của một mảng bằng cách sử dụng số chỉ mục. Đây là cú pháp để truy cập các phần tử của một mảng.

// access array elements

array[index]

Hãy xem một ví dụ về việc truy cập các phần tử mảng bằng cách sử dụng số chỉ mục.

class Main {

 public static void main(String[] args) {

   // create an array

   int[] age = {12, 4, 5, 2, 5};

   // access each array elements

   System.out.println("Accessing Elements of Array:");

   System.out.println("First Element: " + age[0]);

   System.out.println("Second Element: " + age[1]);

   System.out.println("Third Element: " + age[2]);

   System.out.println("Fourth Element: " + age[3]);

   System.out.println("Fifth Element: " + age[4]);

 }

}

Kết quả:

Accessing Elements of Array:

First Element: 12

Second Element: 4

Third Element: 5

Fourth Element: 2

Fifth Element: 5

Trong ví dụ trên, lưu ý rằng chúng ta đang sử dụng số chỉ mục để truy cập từng phần tử của mảng.

Chúng ta có thể sử dụng vòng lặp để truy cập tất cả các phần tử của mảng cùng một lúc.

Vòng lặp qua các phần tử mảng

Trong Java, chúng ta cũng có thể lặp qua từng phần tử của mảng. Ví dụ

Ví dụ: Sử dụng For Loop

class Main {

 public static void main(String[] args) {

   // create an array

   int[] age = {12, 4, 5};

   // loop through the array

   // using for loop

   System.out.println("Using for Loop:");

   for(int i = 0; i < age.length; i++) {

     System.out.println(age[i]);

   }

 }

}

Kết quả:

Using for Loop:

12

4

5

 Trong ví dụ trên, chúng ta đang sử dụng vòng lặp for trong Java để lặp qua từng phần tử của mảng. Lưu ý biểu thức bên trong vòng lặp.

age.length

Ở đây, chúng ta đang sử dụng thuộc tính length của mảng để lấy kích thước của mảng.

Chúng ta cũng có thể sử dụng vòng lặp for-each để lặp qua các phần tử của một mảng. Ví dụ

Ví dụ: Sử dụng vòng lặp cho từng item

class Main {

 public static void main(String[] args) {

   // create an array

   int[] age = {12, 4, 5};

   // loop through the array

   // using for loop

   System.out.println("Using for-each Loop:");

   for(int a : age) {

     System.out.println(a);

   }

 }

}

Kết quả:

Using for-each Loop:

12

4

5

Ví dụ: Tính tổng và trung bình của các phần tử mảng

 class Main {

 public static void main(String[] args) {


   int[] numbers = {2, -9, 0, 5, 12, -25, 22, 9, 8, 12};

   int sum = 0;

   Double average;

   

   // access all elements using for each loop

   // add each element in sum

   for (int number: numbers) {

     sum += number;

   }

  

   // get the total number of elements

   int arrayLength = numbers.length;


   // calculate the average

   // convert the average from int to double

   average =  ((double)sum / (double)arrayLength);


   System.out.println("Sum = " + sum);

   System.out.println("Average = " + average);

 }

}

Kết quả:

Sum = 36

Average = 3.6

Trong ví dụ trên, chúng ta đã tạo một mảng các số được đặt tên. Chúng ta đã sử dụng vòng lặp for each để truy cập từng phần tử của mảng.

Bên trong vòng lặp, chúng tôi đang tính toán tổng của mỗi phần tử. Lưu ý dòng,

int arrayLength = number.length;

Ở đây, chúng ta đang sử dụng thuộc tính length của mảng để tính toán kích thước của mảng. Sau đó, chúng tôi tính giá trị trung bình bằng cách sử dụng:

average = ((double)sum / (double)arrayLength);

Như bạn có thể thấy, chúng tôi đang chuyển đổi giá trị int thành double. Đây được gọi là kiểu ép kiểu trong Java. Để tìm hiểu thêm về cách sắp chữ, hãy truy cập Truyền kiểu Java.

Mảng đa chiều trong java

Mảng chúng ta đã đề cập đến bây giờ được gọi là mảng một chiều. Tuy nhiên, chúng ta có thể khai báo mảng nhiều chiều trong Java.

Mảng nhiều chiều là một mảng của các mảng. Có nghĩa là, mỗi phần tử của mảng nhiều chiều là một mảng chính nó. 

Ví dụ:

double[][] matrix = {{1.2, 4.3, 4.0}, 

      {4.1, -1.1}

};

Ở đây, chúng ta đã tạo một mảng nhiều chiều có tên là ma trận. Nó là một mảng 2 chiều. Để tìm hiểu thêm, hãy truy cập mảng đa chiều Java.

No comments:

Post a Comment