Cách sử dụng cấu trúc dữ liệu mảng và thuật toán trong Java

Mảng được biết đến là một trong những cấu trúc dữ liệu mạnh mẽ để lưu trữ danh sách các phần tử, trong đó bao gồm các đối tượng cụ thể. Trên thực tế nó đem lại nhiều ứng dụng khác nhau trong đó là cấu trúc dữ liệu được sử dụng nhiều nhất Java. Vậy để hiểu được mảng là gì? Cấu trúc dữ liệu mảng và thuật toán trong Java thế nào thì cùng Box.edu tìm hiểu ngay nhé!

Mục lục bài viết

Tổng quan về cấu trúc mảng thực tế

tong-quan-ve-cau-truc-mang.jpg

Tổng quan về cấu trúc mảng thực tế

Hộp macaron này cũng gần giống với cấu trúc dữ liệu mảng trong Java. Nếu chúng ta nhìn vào hộp này thật kỹ, thì chúng ta có thể dễ dàng nhận ra các thuộc tính chính của nó.

  • Nó là một chiếc hộp được thiết kế để đựng bánh macaron, điều này có nghĩa là chiếc hộp này được sản xuất cho bánh macaron. Do đó bạn không thể lưu trữ bánh kem trong đó
  • Tất cả bánh macaron trong hộp này đều ở cạnh nhau. Không có khoảng cách giữa chúng, nghĩa là chúng sẽ tiếp giáp với nhau
  • Mỗi chiếc bánh macaron đều có thể được xác định duy nhất dựa trên vị trí của nó. Nếu ai đó hỏi rằng liệu họ có thể thử chiếc bánh hạnh nhân thứ ba hay không, bạn sẽ biết rằng họ đang nói đến chiếc bánh macaron màu hồng được đặt ở vị trí thứ ba trong hộp
  • Chúng tôi không thể thay đổi kích thước của hộp, vì hộp được cố định. Điều này có nghĩa là hộp này được sản xuất bởi một số nhà sản xuất tiêu chuẩn và giả định rằng sẽ chỉ có 10 bánh macaron trong đó. Do đó chúng tôi không thể thay đổi kích thước của hộp này

Ở đây, chúng ta có 6 phần tử được đặt cạnh nhau giống như những chiếc bánh macaron trong hộp. Hãy xem xét các thuộc tính của một mảng để tìm thêm các điểm tương đồng. 

  • Một mảng chỉ có thể lưu trữ dữ liệu của một kiểu được chỉ định. Khi đã xác định kiểu dữ liệu cho một mảng, các phần tử phải cùng kiểu dữ liệu mà chúng ta đã xác định. Điều này có nghĩa là khi chúng ta tạo một mảng các số nguyên, chúng ta không thể lưu trữ các giá trị chuỗi trong mảng. Nếu bạn cố gắng làm như vậy, nó sẽ gây ra lỗi
  • Các phần tử của một mảng nằm ở vị trí liền kề trong bộ nhớ. Hay nói cách khác, các phần tử nằm cạnh nhau. Không có khoảng cách giữa chúng, như chúng tôi đã lưu ý với bánh macaron
  • Mỗi phần tử của một mảng có một chỉ số duy nhất. Chỉ số của phần tử thứ tư là 3, nghĩa là mỗi phần tử có một chỉ số duy nhất bắt đầu từ 0. Do vậy, phần tử đầu tiên bắt đầu từ 0 và tăng tuần tự
  • Thuộc tính cuối cùng là kích thước của một mảng, được xác định trước và không thể sửa đổi. Nếu chúng ta nhìn lại hộp bánh macaron này, chúng ta có thể thấy rằng kích thước của hộp đã được xác định trước. Điều này có thể áp dụng cho một mảng. Khi chúng ta tạo một mảng, chúng ta cũng xác định dung lượng của nó, đây là một trong những hạn chế lớn nhất của mảng

Ý nghĩa của cấu trúc dữ liệu mảng và thuật toán trong Java

Trong khoa học máy tính, mảng là một cấu trúc dữ liệu bao gồm các phần tử, và mỗi phần tử được xác định bởi ít nhất một chỉ số mảng hoặc khóa. Một mảng được lưu trữ để có thể tính toán được các vị trí của mỗi phần tử bằng một công thức toán học.

Vói các chương trình phần mềm, mảng thường được sử dụng hầu hết ở mọi nơi trong chương trình để lưu trữ bất kỳ dữ liệu nào. Hãy xem xét một tình huống mà chúng ta cần lưu trữ ba số nguyên. Nếu chúng ta sử dụng các khái niệm kiểu dữ liệu và biến đơn giản của lập trình, thì chúng ta phải cần ba biến thuộc kiểu dữ liệu int và chương trình sẽ được thể hiện như sau:

int main () { int num1; int num2; int num3; }

Ở cấp độ cao hơn, việc thực hiện các giao dịch như tìm kiếm nhị phân, thuật toán sắp xếp và thuật toán tìm kiếm hoặc cây tìm kiếm trên các danh sách được liên kết như thế này sẽ dễ dàng hơn. Java không phải là duy nhất – mảng rất quan trọng trong khoa học máy tính.

Các loại cấu trúc dữ liệu mảng và thuật toán trong Java

cac-loai-cau-truc-du-lieu-mang-va-thuat-toan-trong-java.jpg

Các loại cấu trúc dữ liệu mảng và thuật toán trong Java

Mảng một chiều

Mảng một chiều hay còn được gọi là mảng tuyến tính. Mảng này sẽ có một loạt các giá trị được khai báo với một chỉ mục duy nhất. 

Các phần tử của mảng một chiều có thể được truy cập bằng cách sử dụng [i] trong đó a là tên của mảng và i là chỉ số từ 0 đến n. Nếu muốn truy cập số 10 từ mảng này, thì bạn sẽ sử dụng 2 làm chỉ số như sau:

a [2] // a là tên của mảng
// 10

Mảng hai chiều

Khác với mảng một chiều thì với mảng 2 chiều sẽ chứa số hàng nhiều hơn một, đại diện cho ma trận điển hình.

Nó là một mảng với một loạt các giá trị đã được khai báo với một chỉ mục kép. Cách mảng ở trên có nhiều cột và hàng do đó nếu chúng ta quan sát kỹ, chúng ta có thể thấy rằng mảng hai chiều được cấu tạo bởi các mảng một chiều. 

Ngoài ra để truy cập các phần tử của mảng hai chiều, chúng ta có chỉ mục cho các cột và hàng. Ví dụ, để truy cập 20 trong hàng đầu tiên, chúng ta cần tìm chỉ số của hàng trước, sau đó là chỉ số của cột. 

a [0] [4]
  // 20

Tương tự, nếu chúng ta muốn tìm địa chỉ của phần tử này ở đây:

a [2] [5]

Chính vì vậy, đầu tiên chúng tôi đặt số hàng sau đó mới đến số cột. 

Mảng ba chiều

Nó tương tự như mảng hai chiều. Chúng ta có thể hình dung một mảng ba chiều là nhiều mảng hai chiều và các giá trị được khai báo với ba chỉ mục. Mảng ba chiều có thể được biểu diễn bằng một hình khối với các số trên đó. Nên nếu quan sát kỹ, chúng ta có thể thấy rằng mỗi mặt của khối lập phương này được cấu tạo bởi các mảng hai chiều, nghĩa là mảng ba chiều là sự kết hợp của các mảng hai chiều.

Để truy cập các phần tử của mảng, đầu tiên bạn cần tìm độ sâu của mảng. Sau đó, chúng ta cần tìm số hàng, và cuối cùng là chỉ số của cột. Ngoài ra nếu bạn muốn truy cập số 2 từ phía màu đỏ thì có thể viết như sau:

a [0] [0] [1]
// 2

Nếu chúng ta muốn truy cập một phần tử của 3 trên mặt trắng của khối lập phương này. Độ sâu là 2 và chỉ số hàng là 0, chỉ số cột là 1. Chúng ta có thể truy cập nó như sau:

A [2] [0] [2]
// 3

Mảng trong bộ nhớ

Khi chúng ta bắt đầu khởi tạo một mảng gồm chín phần tử, trình biên dịch sẽ phân bổ 9 ô liền nhau trong bộ nhớ. Dựa trên tải hệ thống, trình biên dịch sẽ quyết định vị trí ô ban đầu bắt đầu trên RAM. Chúng tôi với tư cách là nhà phát triển không thể làm bất kỳ điều gì, bởi vì nó còn phụ thuộc vào hệ thống mà mảng này sẽ được bắt đầu từ đâu.

Hệ thống này cũng đảm bảo rằng tất cả các ô này sẽ liền nhau trong bộ nhớ. Không thể xảy ra trường hợp ô 1 nằm ngoài ô 2 trong bộ nhớ. Tất cả chúng phải ở cạnh nhau vì đây là tính chất của một mảng. 

Cấu tạo của cấu trúc dữ liệu mảng và thuật toán trong Java

Để tạo một mảng trong Java, chúng ta sẽ thực hiện theo ba bước sau:

  • Tuyên bố tạo một tham chiếu đến một mảng
  • Thuyết minh một mảng tạo một mảng
  • Khởi tạo gán giá trị cho các ô trong một mảng

Bước đầu tiên là chúng ta khai báo một mảng, vì vậy khi khai báo một mảng, thì hệ thống không bao giờ cấp phát cho mảng đó. Tất cả những gì nó làm là tạo một biến tham chiếu. Giả sử bạn đã đặt tên mảng của mình là arr, vì vậy biến tham chiếu sẽ là tên của mảng. Trong bộ nhớ, tất cả những gì hệ thống làm chính là tạo ra một biến tham chiếu.

Bước tiếp theo là khởi tạo mảng. Khi chúng ta khởi tạo một mảng, trình biên dịch sẽ cấp phát bộ nhớ cho mảng này. Do đó giả sử mảng của chúng ta có kích thước là năm, thì hệ thống sẽ phân bổ 5 ô liền kề cho mảng này ở đây. 

Như vậy bạn có thể quan tâm đến giá trị của các ô này. Nó được đặt mặc định ở 0, vì vậy trình biên dịch sẽ lưu trữ địa chỉ của ô đầu tiên trong biến tham chiếu này.

Tổng kết

Học cấu trúc dữ liệu và thuật toán trong Java là điều quan trọng đối với bất kỳ lập trình viên mới bắt đầu nào. Tuy nhiên, mảng chỉ là một yếu tố quan trọng để làm việc với Java. Đó cũng là một trong những điều đầu tiên bạn sẽ học – nhưng bản thân một mảng không có tác dụng gì nhiều. Box.edu hy vọng rằng những thông tin được chia sẻ ở trên sẽ giúp các bạn nắm được rõ hơn về ngôn ngữ lập trình Java này.

5/5 - (20 bình chọn)
Xin chào các bạn! Mình là Hà Nguyên Phương Hiện đang là tác giả của Box.edu.vn website nổi tiếng chuyên review, đánh giá, giới thiệu các khóa học hay nhất hiện nay.