Như chúng ta đã biết, ArrayList và Vector là các class được cài sẵn trong List inteface, đặc trưng cơ bản là một mảng động (có số phần tử có thể thay đổi).
Bên cạnh đó, không ít người không nhận ra sự khác nhau giữa hai cấu trúc dữ liệu này, bài viết hôm nay sẽ làm rõ vấn đề này.
Tính đồng bộ:
Vector có tính đồng bộ, nghĩa là trong cùng một thời điểm chỉ có một thread có quyền truy cập vào nó.
Ngược lại, ArrayList là một cấu trúc dữ liệu bất đồng bộ, nhiều thread có thể làm việc cùng một lúc.
Thread đối với ArrayList và Vector (nguồn: geeksforgeeks) |
Hiệu suất:
Theo giải thích ở trên, vì tính đồng bộ, hoạt động của Vector tốn thời gian hơn. Khi một thread đang làm việc, Vector tạm thời "khóa" lại, yêu cầu các thread còn lại phải xếp hàng cho đến khi thread hiện tại đã xử lý xong.
Rõ ràng, ArrayList nhanh hơn.
Tăng kích thước
ArrayList và Vector đều tự tăng và co kích thước để duy trì việc sử dụng tối ưu bộ nhớ, nhưng cơ chế hoạt động của chúng lại khác nhau. Mỗi lần sử dụng hết bộ nhớ:
ArrayList sẽ cấp phát thêm 50% kích thước của nó hiện tại.
Vector sẽ cấp phát thêm 100% kích thước của nó hiện tại (nhân đôi kích thước).
Duyệt phần tử
ArrayList chỉ có thể dùng Iterator để duyệt.
Vector có thể dùng cả Enumeration và Iterator để duyệt.
Nên dùng cái nào?
Hầu hết các lập trình viên Java thích dùng ArrayList hơn so với Vector bởi vì ArrayList có thể có tính đồng bộ một cách tường minh bằng cách sử dụng Collections.synchronizedList.
Nếu bạn không đi sâu vào ứng dụng cấu trúc dữ liệu để tối ưu chương trình nhất có thể, bạn có thể sử dụng cái nào cũng được, bởi sự khác nhau giữa chúng là không quá lớn.
Sưu tầm và dịch từ: https://www.geeksforgeeks.org/vector-vs-arraylist-java/
HẢI DƯƠNG
Nhận xét
Đăng nhận xét