Có bất kỳ (các lớp danh sách liên kết kép được tích hợp tốt) có sẵn cho Java không? Hay tôi nên tự làm? Boost có nó cho C++: http://beta.boost.org/doc/libs/1_40_0/doc/html/boost/intrusive/list.html.Triển khai danh sách xâm nhập cho Java?
Danh sách xâm nhập là một thùng chứa (trong trường hợp này) các con trỏ tiếp theo và trước trong phần tử, do đó các hoạt động danh sách điển hình như thay thế và loại bỏ có thể được nhắm mục tiêu trực tiếp vào lớp cơ sở thay vì lớp container. Có một số tình huống nhất định, trong đó danh sách xâm nhập là giải pháp tốt nhất.
Tôi cố gắng đưa ra một ví dụ phù hợp. Giả sử tôi đã liên kết danh sách L list1 và L list2 thuộc sở hữu của các loại khác nhau của các lớp X1 và Y2.
lớp Q (không có gì để làm hoặc không dễ dàng truy cập vào giao diện x1 và Y2 nếu không) cần phải làm i) thay thế, ii) loại bỏ hoạt động cho phần tử e, luôn tồn tại ở đâu đó, trong danh sách1 xor list2 tùy thuộc vào trạng thái thời gian chạy, nhưng thông tin đó không được lưu trữ trực tiếp ở bất kỳ đâu.
Với danh sách intrussive Q chỉ có thể lưu trữ tham chiếu đến phần tử thành phần tử e và nó luôn chỉ đúng vị trí.
Nếu không, bạn phải chọn một số cách giải quyết rõ ràng phức tạp hơn hoặc cách khác. - Lớp trình bao bọc cho phần tử e và các phương thức bổ sung để hoàn thành các hoạt động i và ii. Số
Về cơ bản, câu hỏi vẫn không phải là về hiệu suất mà là sự phức tạp của kiến trúc. Điều này cũng có thể được hiểu là một loại tình huống đối tượng được chia sẻ nơi mà giải pháp IL tránh nhu cầu cập nhật cho mọi khách hàng Lx và Q.
Xin lưu ý rằng tôi không cần thiết phải tương thích với các thùng chứa tiêu chuẩn khác. Chỉ cần thực thi lsit xâm nhập chung với một thao tác lặp, thêm, loại bỏ và tìm được sử dụng với lớp phần tử không xác định.
Cảm ơn.
Bạn có thể giải thích lý do tại sao java.util.LinkedList "cổ điển" không phải là một thực hiện đủ tốt của LinkedList cho bạn? Và cũng tại sao, oh tại sao, bạn không muốn thực hiện giao diện Collection, khi nó chắc chắn thực hiện nó làm cho bộ sưu tập của bạn có thể sử dụng, thay vì một triệu chứng NIY nữa. – Riduidel
@Riduidel. Ngoài ra, kể từ Java 1.6, có một thay thế tuyệt vời cho 'LinkedList', được gọi là' ArrayDeque'. –
Lợi ích chính của danh sách xâm nhập là, với một phần tử trong danh sách, nó có thể được loại bỏ trong thời gian không đổi. Không cần tìm kiếm vì các liên kết 'next' và' previous' nằm ngay trong phần tử. Xem 'iterator_to' trong tài liệu Boost được liên kết. Ngoài ra còn có một số tiết kiệm bộ nhớ bởi vì một đối tượng wrapper bổ sung là không cần thiết cho mỗi mục trong danh sách. –