Mảng so với danh sách
Mảng là cấu trúc dữ liệu được sử dụng phổ biến nhất để lưu trữ một tập hợp các phần tử. Hầu hết các ngôn ngữ lập trình cung cấp các phương thức để dễ dàng khai báo các mảng và các phần tử truy cập trong các mảng. Một danh sách mảng có thể được xem như là một mảng động, có thể tăng kích thước. Vì lý do này, lập trình viên không cần biết kích thước của danh sách mảng khi cô ấy xác định nó.
Mảng là gì?
Hiển thị trong hình 1, là một đoạn mã thường được sử dụng để khai báo và gán giá trị cho một mảng. Hình 2 mô tả một mảng trông như thế nào trong bộ nhớ.
giá trị int [5]; giá trị [0] = 100; giá trị [1] = 101; giá trị [2] = 102; giá trị [3] = 103; các giá trị [4] = 104; |
Hình 1: Mã để khai báo và gán giá trị cho một mảng
100 | 101 | 102 | 103 | 104 |
Chỉ số: 0 | 1 | 2 | 3 | 4 |
Hình 2: Mảng được lưu trữ trong bộ nhớ
Trên mã, định nghĩa một mảng có thể lưu trữ 5 số nguyên và chúng được truy cập bằng cách sử dụng các chỉ số 0 đến 4. Một thuộc tính quan trọng của một mảng là, toàn bộ mảng được phân bổ thành một khối bộ nhớ duy nhất và mỗi phần tử có không gian riêng trong mảng . Khi một mảng được xác định, kích thước của nó được cố định. Vì vậy, nếu bạn không chắc chắn về kích thước của mảng tại thời điểm biên dịch, bạn sẽ phải xác định một mảng đủ lớn để ở bên an toàn. Nhưng, hầu hết thời gian, chúng tôi thực sự sẽ sử dụng số lượng phần tử ít hơn số lượng chúng tôi đã phân bổ. Vì vậy, một lượng đáng kể bộ nhớ thực sự bị lãng phí. Mặt khác, nếu mảng đủ lớn, thì không đủ lớn, chương trình sẽ bị sập.
Danh sách mảng là gì?
Một danh sách mảng có thể được xem như là một mảng động, có thể tăng kích thước. Do đó, danh sách mảng là lý tưởng để được sử dụng trong tình huống mà bạn không biết kích thước của các yếu tố cần thiết tại thời điểm khai báo. Trong Java, danh sách mảng chỉ có thể giữ các đối tượng, chúng không thể giữ các kiểu nguyên thủy trực tiếp (bạn có thể đặt các kiểu nguyên thủy bên trong một đối tượng hoặc sử dụng các lớp bao bọc của các kiểu nguyên thủy). Nói chung, danh sách mảng được cung cấp với các phương thức để thực hiện chèn, xóa và tìm kiếm. Độ phức tạp thời gian của việc truy cập một phần tử là o (1), trong khi chèn và xóa có độ phức tạp thời gian là o (n). Trong Java, danh sách mảng có thể được duyệt qua các vòng lặp foreach, iterators hoặc đơn giản là sử dụng các chỉ mục.
Sự khác biệt giữa Mảng và Danh sách mảng là gì
Mặc dù các mảng và danh sách mảng giống nhau theo nghĩa là cả hai đều được sử dụng để lưu trữ các bộ sưu tập các phần tử, chúng khác nhau về cách chúng được định nghĩa. Kích thước của mảng phải được đưa ra khi một mảng được xác định, nhưng bạn có thể xác định một danh sách mảng mà không cần biết kích thước thực tế. Bạn có thể thêm các phần tử vào một danh sách mảng sau khi nó được xác định và điều này là không thể với các mảng. Nhưng trong Java, danh sách mảng không thể chứa các kiểu nguyên thủy, nhưng các mảng có thể được sử dụng để giữ các kiểu nguyên thủy. Nhưng nếu bạn cần một cấu trúc dữ liệu có thể thay đổi kích thước của nó, danh sách mảng sẽ là lựa chọn tốt nhất.