"Hãy luyện tập một chút cho bộ não của bạn đi? Tôi hy vọng nó vẫn hoạt động bình thường."

"Trước đó, trong bảng các bộ chứa và bộ sưu tập, bạn đã thấy rằng cùng một giao diện có thể có nhiều cách triển khai. Bây giờ tôi sẽ cho bạn biết lý do tại sao chúng ta cần điều đó. Và ArrayList khác với LinkedList như thế nào ."

"Vấn đề là, các bộ sưu tập có thể được triển khai theo nhiều cách khác nhau và không có cách triển khai nào luôn lý tưởng. Theo một cách tiếp cận, một số thao tác diễn ra nhanh, nhưng một số thao tác khác lại chậm. Điều ngược lại có thể đúng với một cách tiếp cận khác. Không có cách tiếp cận một kích thước hoàn hảo nào giải pháp phù hợp với tất cả."

"Đó là lý do tại sao quyết định triển khai một số phiên bản của cùng một bộ sưu tập được đưa ra. Mỗi lần triển khai phải được tối ưu hóa cho một số nhóm hoạt động hẹp. Đây là cách các bộ sưu tập khác nhau ra đời. Hãy nghiên cứu hai lớp làm ví dụ: ArrayListLinkedList ."

ArrayList so với LinkedList - 1

"Trong nội bộ, ArrayList được triển khai như một mảng thông thường . Đó là lý do tại sao việc chèn một phần tử vào giữa yêu cầu trước tiên chúng ta chuyển tất cả các phần tử tiếp theo lên một, sau đó đặt phần tử mới vào vị trí trống. Lấy và thiết lập các phần tử (get, set ) rất nhanh , vì các thao tác này chỉ đơn giản là giải quyết phần tử mảng có liên quan."

" LinkedList có cấu trúc bên trong khác. Nó được triển khai dưới dạng danh sách có các phần tử được kết nối với nhau : một tập hợp các phần tử riêng biệt, mỗi phần tử lưu trữ các tham chiếu đến phần tử tiếp theo và trước đó trong danh sách. Để chèn một phần tử vào giữa danh sách như vậy, bạn chỉ cần thay đổi tham chiếu của các hàng xóm trong tương lai của nó.Tuy nhiên, để lấy phần tử số 130, bạn phải chạy qua từng đối tượng từ 0 đến 130. Nói cách khác, các thao tác get và set sẽ chậm.Hãy xem bảng sau :"

Sự miêu tả Hoạt động Lập danh sách LinkedList
Nhận một phần tử lấy Nhanh Chậm
Đặt một phần tử bộ Nhanh Chậm
Thêm phần tử (vào cuối danh sách) thêm vào Nhanh Nhanh
Chèn một phần tử (tại vị trí tùy ý) thêm (i, giá trị) Chậm Nhanh
Xóa một phần tử di dời Chậm Nhanh

"Tôi hiểu rồi. Tôi bắt đầu hiểu nó rồi. Có tiêu chí hay quy tắc nào giúp tôi biết bộ sưu tập nào là tốt nhất trong một tình huống cụ thể không?"

"Để đơn giản, tôi sẽ cung cấp cho bạn quy tắc sau: nếu bạn định thường xuyên chèn (hoặc xóa) các phần tử ở giữa bộ sưu tập, thì tốt hơn là sử dụng LinkedList . Trong tất cả các trường hợp khác, ArrayList hoạt động tốt hơn . "

"Chúng ta sẽ đi sâu vào cách chúng được cấu trúc trong các bài học nâng cao hơn, nhưng bây giờ chúng ta sẽ chỉ thực hành sử dụng chúng."