Để đạt được hiệu quả thực sự tốt khi sao chép một loạt các dữ liệu giữa hai loại danh sách chưa được biết đến nhau, thì phải có một cơ chế theo đó một loại "đáng tin cậy" có thể yêu cầu mỗi để lộ (các) mảng sao lưu được liên kết với một loạt các phần tử, và sau đó sử dụng thao tác sao chép số lượng lớn để di chuyển dữ liệu từ một đến khác. Có thể viết một lớp như vậy hoàn toàn bằng Java, bằng cách có một phương thức GetArraySource
truyền cho hàm tạo của lớp ArraySource
tin cậy một đối tượng mà nó có thể sử dụng để yêu cầu mảng sao lưu được liên kết với một phần tử cụ thể (trả về sẽ bao gồm mảng sao lưu) và phạm vi các yếu tố được bao gồm trong đó).Mã muốn sao chép sẽ gọi GetArraySource
và vượt qua ArraySource
được trả về từ đó đến phương thức CopyFromArraySource
của danh sách đích, sau đó có thể yêu cầu ArraySource
sao chép một hoặc nhiều phạm vi mục vào (các) mảng sao lưu riêng của nó.
Nếu ArraySource
là một lớp học được cung cấp với Java, và Oracle ghi nhận chính xác những gì nó sẽ làm gì với mảng mà nó nhận được, sau đó nó sẽ có thể với nhiều loại như ArrayList
và String
để lộ nội dung của họ như là một ArraySource
, hoặc chấp nhận dữ liệu bên ngoài từ một số ArraySource
, mà không hiển thị không đúng mảng của chúng với bất kỳ mã nào có thể lạm dụng nó.
Thật không may, trừ khi Oracle kết hợp một thứ như vậy vào bản phân phối Java, hỗ trợ có thể sẽ quá thưa thớt để hữu ích. Nó không tốt để có danh sách nguồn hỗ trợ một lớp như vậy, đích hỗ trợ một lớp khác và mã muốn hoạt động sao chép thứ ba. Tất cả ba lớp cần hỗ trợ cùng lớp tin cậy-array-segment-copy-helper.
nó được gọi là Clojure; D Bạn có thể đọc về (conj) tại đây: http://clojuredocs.org/clojure.core/conj – sova
nó còn được gọi là Scala, và Haskell, và… (chèn tên của bất kỳ ngôn ngữ lập trình mạnh mẽ nào) –