Nhìn từ diagram ở trên, thì tất cả đều implement List Interface. Chúng khá giống nhau về cách sử dụng. Điểm khác nhau chính là cách hoạt động của chúng sẽ dẫn đến sự khác nhau về performance cho những trường hợp sử dụng khác nhau. Show
Vector và ArrayList yêu cầu nhiều không gian lưu trữ hơn những phần tử đã được add vào. Đọc thêm ở https://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html https://docs.oracle.com/javase/7/docs/api/java/util/Vector.html LinkedList implement List, tuy nhiên nó cũng implement Queue interface, nên sẽ có thêm các method khác so với ArrayList và Vector, chẳng hạn như offer(), peek(), pool() ... . Note: capacity mặc định khi khởi tạo của ArrayList là tương đối nhỏ,một thói quen tốt khi khởi tạo ArrayList là tạo nó với capacity lớn hơn (tùy trường hợp), điều này có thể tránh việc resize khi thêm nhiều phần tử vào list. 3. ArrayList example
4. LinkedList example
Nhìn vào những ví dụ trên này, thì ArrayList và LinkedList sử dụng khá giống nhau. Điểm khác nhau thật sự nằm ở sự triển khai và hoạt động phía bên trong của chúng 5. VectorVector gần giống với ArrayList. điểm khác biệt là Vector được synchronize. Vì vậy, nó sẽ tốn tài nguyên hơn so với ArrayList. Thông thường, hầu hết mọi người sẽ sử dụng ArrayList thay vì Vector, họ sẽ tự điều khiển việc synchronize theo cách của họ. 6. Performance of ArrayList vs LinkedListBảng độ phức tạp của ArrayList & LinkedList : Tôi sử dụng đoạn code sau để test performance
Kết quả :
Sự khác biệt về hiệu suất của chúng là điều dễ nhận thấy. LinkedList nhanh hơn trong quá trình add và remove, nhưng chậm hơn trong get. Dựa trên bảng độ phức tạp thuật toán ở trên và kết quả test, chúng ta có thể biết được khi nào nên dùng cái gì. Nói ngắn gọn , LinkedList nên được sử dụng nếu : Mảng cơ bản trong Java là cố định về số phần tử, nghĩa là sau khai báo chúng không thể mở rộng, hay cắt bớt số phần tử. Nếu muốn có thêm chức năng này thì dùng ArrayList trong package java.util import java.util.ArrayList; //... ArrayList colors = new ArrayList(); Bạn cũng có thể khai báo chi ngay ra kiểu các phần tử mảng này lưu trữ //Khai báo kiểu phần tử String, khởi tạo với 10 phần tử ArrayList colors = new ArrayList(10); Nên nhớ ArrayList lưu giữ các phần tử là đối tượng, nên các kiểu nguyên thủy int, double, float ... không dùng được. Thay vào đó hãy dùng các lớp tương ứng như Integer, Double, Float ... Một số phương thức ArrayList
import java.util.ArrayList; public class MyClass { }
/* Output :
LinkedListLinkedList có cú pháp, khai báo rất giống với ArrayList, bạn dễ dàng đổi từ ArrayList sang LinkedList bằng cách thay kiểu đối tượng. Điều khác biết giữa LinkedList và ArrayList là cách chúng lưu trữ dữ liệu. ArrayList tốt để lưu trữ và truy cập dữ liệu, nó gần giống với mảng thông thường. LinkedList thì tốt để tương quản lý dữ liệu, như chèn và xóa một lượng lớn phần tử. ArrayList và LinkedList khác nhau như thế nào?ArrayList: Thích hợp cho việc lưu trữ và truy cập dữ liệu khi bạn cần nhanh chóng truy cập các phần tử theo chỉ số. Ví dụ: danh sách điểm của một lớp học. LinkedList: Thích hợp cho các thao tác thêm/xoá dữ liệu thường xuyên, chẳng hạn như danh sách cuộc gọi hoặc hàng đợi (queue) với việc thêm/xoá phần tử ở cả hai đầu. ArrayList và LinkedList khi nào đúng cái nào?ArrayList là dùng một mảng động (như mảng thường nhưng có thể thay đổi kích thước và các phương thức thêm) để lưu trữ phần tử. LinkedList sử dụng danh sách liên kết để lưu trữ phần tử. Mỗi phần thử có thể được gọi là 1 node trong danh sách. Hoạt động xóa trong LinkedList là nhanh hơn trong ArrayList tại sao?Thao tác thêm và xóa phần tử với LinkedList nhanh hơn ArrayList. Bởi vì nó không cần sắp xếp lại các phần tử sau khi thêm hoặc xóa. Nó chỉ cần cập nhật lại tham chiếu tới phần tử phía trước và sau nó. Sự khác biệt giữa ArrayList và vector là gì?Khác nhau của ArrayList và VectorVector là synchronized. ArrayList là nhanh hơn vì nó là non-synchronized. Vector là chậm hơn ví nó là synchronized. Tức là, trong môi trường đa luồng, các thread giữ nó ở trong trạng thái runnable hoặc non-runnable cho đến khi thread hiện tại giải phóng đối tượng đó. |