Sự khác biệt giữa Arrays và Arraylists

Anonim

Mảng Arrays vs Arrayylists

Mảng là cấu trúc dữ liệu được sử dụng phổ biến nhất để lưu trữ một bộ sưu tập các yếu tố. Hầu hết các ngôn ngữ lập trình cung cấp các phương pháp để dễ dàng tuyên bố mảng và các yếu tố truy cập trong các mảng. Một arraylist có thể được xem như là một mảng động, có thể phát triển trong kích thước. Vì lý do này, lập trình viên không cần phải biết kích thước của người arraylist khi cô định nghĩa 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 các giá trị cho một mảng. Hình 2 miêu 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;

giá trị [4] = 104;

Hình 1: Mã cho việc khai báo và gán các giá trị cho mảng

100 101 102 103 104
Chỉ mục: 0 1 2 < 3 4 Hình 2: Mảng 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ác chỉ số từ 0 đến 4. Một đặc tính quan trọng của một mảng là, toàn bộ mảng được phân bổ như một khối bộ nhớ duy nhất và mỗi phần tử đều có không gian riêng trong mảng đó. Một khi mảng được xác định, kích thước của nó là 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 gian biên dịch, bạn sẽ phải xác định một mảng đủ lớn để được ở bên an toàn. Tuy nhiên, hầu hết thời gian, chúng ta sẽ sử dụng ít số phần tử hơn là chúng ta đã phân bổ. Vì vậy, một bộ nhớ đáng kể là thực sự lãng phí. Mặt khác nếu "mảng đủ lớn" là không thực sự đủ lớn, chương trình sẽ sụp đổ.

Arraylists là gì?

Một arraylist có thể được xem như là một mảng động, có thể phát triển trong kích thước. Do đó những người arraylist 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 tuyên bố. Trong Java, các arraylist chỉ có thể chứa 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 wrapper của các kiểu nguyên thuỷ). Nói chung arraylists được cung cấp với các phương pháp để thực hiện chèn, xóa và tìm kiếm. Thời gian phức tạp của truy cập vào một phần tử là o (1), trong khi chèn và xóa có độ phức tạp về thời gian của o (n). Trong Java, các arraylist có thể được đi qua bằng cách sử dụng vòng foreach, vòng lặp hoặc chỉ đơn giản bằng cách sử dụng các chỉ số.

Sự khác nhau giữa Mảng và ArrayLists

Mặc dù mảng và ArrayLists giống nhau theo nghĩa cả hai đều được sử dụng để lưu trữ các bộ sưu tập của 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 cho khi một mảng được định nghĩa, nhưng bạn có thể định nghĩa một mảng mà không biết kích thước thực. Bạn có thể thêm các phần tử vào một ArrayList sau khi nó được định nghĩa và điều này là không thể với mảng.Nhưng trong Java, các arraylist không thể giữ các kiểu nguyên thuỷ, 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 mà có thể thay đổi kích thước của nó, arraylist sẽ là sự lựa chọn tốt nhất.