Bạn quyết định khi nào sử dụng ArrayList và LinkedList

Lý do chính bạn làm điều này là để tách mã của bạn khỏi một triển khai cụ thể của giao diện. Khi bạn viết mã của bạn như thế này:

List list = new ArrayList[];

phần còn lại của mã của bạn chỉ biết rằng dữ liệu thuộc loại List, điều này thích hợp hơn vì nó cho phép bạn chuyển đổi giữa các triển khai khác nhau của giao diện List một cách dễ dàng.

Chẳng hạn, giả sử bạn đang viết một thư viện bên thứ 3 khá lớn và nói rằng bạn đã quyết định triển khai lõi thư viện của mình bằng một LinkedList. Nếu thư viện của bạn phụ thuộc nhiều vào việc truy cập các yếu tố trong các danh sách này, thì cuối cùng bạn sẽ thấy rằng bạn đã đưa ra quyết định thiết kế kém; bạn sẽ nhận ra rằng bạn nên sử dụng ArrayList [cung cấp cho O[1] thời gian truy cập] thay vì LinkedList [cung cấp cho O[n] thời gian truy cập]. Giả sử bạn đã lập trình lên một giao diện, thực hiện một thay đổi như vậy là dễ dàng. Bạn chỉ cần thay đổi thể hiện của List từ,

List list = new LinkedList[];

đến

List list = new ArrayList[];

và bạn biết rằng điều này sẽ hoạt động vì bạn đã viết mã của mình để tuân theo hợp đồng được cung cấp bởi giao diện List.

Mặt khác, nếu bạn đã triển khai lõi thư viện của mình bằng cách sử dụng LinkedList list = new LinkedList[], thì việc thay đổi như vậy sẽ không dễ dàng, vì không có gì đảm bảo rằng phần còn lại của mã của bạn không sử dụng các phương thức cụ thể cho lớp LinkedList.

Nói chung, sự lựa chọn chỉ đơn giản là vấn đề thiết kế ... nhưng kiểu thiết kế này rất quan trọng [đặc biệt là khi làm việc trên các dự án lớn], vì nó sẽ cho phép bạn thực hiện các thay đổi cụ thể sau khi thực hiện mà không vi phạm mã hiện có.

Video liên quan

Chủ Đề