Arraylist so với Vector
Một danh sách mảng có thể được xem như 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 họ định nghĩa nó. Vector cũng có thể được xem như một mảng có thể phát triển về kích thước. Các vectơ có thể được cấp phát dễ dàng và có thể được sử dụng khi không biết kích thước yêu cầu của bộ nhớ cho đến thời gian chạy.
Arraylist là gì?
Một danh sách mảng có thể được xem như 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 trường hợp bạn không biết kích thước của các phần tử được yêu cầu tại thời điểm khai báo. Trong Java, danh sách mảng chỉ có thể chứa các đối tượng, chúng không thể chứa 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 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 việc 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 bằng cách sử dụng vòng lặp foreach, trình vòng lặp hoặc đơn giản là sử dụng các chỉ mục. Trong Java, danh sách mảng đã được giới thiệu từ phiên bản 1.2 và nó là một phần của Khung Bộ sưu tập Java.
Vector là gì?
Vector cũng là một mảng có thể phát triển về kích thước. Các vectơ có thể được cấp phát dễ dàng và có thể được sử dụng khi không biết kích thước yêu cầu của bộ lưu trữ cho đến thời gian chạy. Các vectơ cũng chỉ có thể chứa các đối tượng và không thể giữ các kiểu nguyên thủy. Các vectơ được đồng bộ hóa, do đó có thể được sử dụng an toàn trong môi trường đa luồng. Vectơ được cung cấp các phương thức để thêm đối tượng, xóa đối tượng và tìm kiếm đối tượng. Tương tự như danh sách mảng trong java, vectơ có thể được duyệt bằng cách sử dụng vòng lặp foreach, trình vòng lặp hoặc đơn giản là sử dụng các chỉ mục. Khi nói đến Java, vectơ đã được đưa vào kể từ phiên bản Java đầu tiên.
Sự khác biệt giữa Arraylist và Vector là gì?
Mặc dù cả danh sách mảng và vectơ đều rất giống với mảng động có thể tăng kích thước, chúng có một số khác biệt quan trọng. Sự khác biệt chính giữa danh sách mảng và vectơ là các vectơ được đồng bộ hóa trong khi danh sách mảng không được đồng bộ hóa. Do đó việc sử dụng danh sách mảng trong môi trường đa luồng sẽ không phù hợp, trong khi vectơ có thể được sử dụng an toàn trong môi trường đa luồng (vì chúng an toàn cho luồng). Nhưng đồng bộ hóa trong vectơ sẽ làm giảm hiệu suất. Do đó, sẽ không phải là một ý kiến hay nếu sử dụng vectơ trong một môi trường luồng đơn. Bên trong, cả danh sách mảng và vectơ đều sử dụng mảng để chứa các đối tượng. Khi không gian hiện tại không đủ, vectơ sẽ tăng gấp đôi kích thước của mảng bên trong của nó, trong khi danh sách mảng tăng 50% kích thước của mảng bên trong của nó. Nhưng khi sử dụng cả danh sách mảng và vectơ, bằng cách cung cấp dung lượng ban đầu phù hợp, có thể tránh được việc thay đổi kích thước không cần thiết của mảng bên trong. Trong tình huống đã biết tốc độ tăng trưởng của dữ liệu, việc sử dụng vectơ sẽ phù hợp hơn vì giá trị gia tăng của vectơ có thể được xác định.