Для достижения действительно хорошую эффективность при копировании диапазона данных между двумя типами списков, которые неизвестны друг другу, должен быть механизм с помощью которого «доверенный» тип может попросить каждого разоблачить массив (ы) поддержки, связанный с рядом элементов, а затем использовать операцию массовой копии для перемещения данных от одного к другому. Можно было бы полностью написать такой класс в Java, получив способ GetArraySource
передать конструктору доверенного класса ArraySource
объект, который он мог бы использовать для запроса массива поддержки, связанного с конкретным элементом (возврат будет включать в себя массив поддержки и диапазон элементов, включенных в него).Код, требующий копии, вызовет GetArraySource
и передаст ArraySource
, возвращенный тем самым методу CopyFromArraySource
списка адресата, который затем может запросить ArraySource
для копирования одного или нескольких диапазонов элементов в собственный массив (ы) поддержки.
Если ArraySource
был класс поставляется с Java и Oracle документально, что именно он будет делать с массивами, которые были получены, то можно было бы для типов, таких как ArrayList
и String
, чтобы выставить их содержимое как ArraySource
или принимать внешние данные от ArraySource
, без неправильного отображения их массива на любой код, который может его нарушить.
К сожалению, если Oracle не включит такую вещь в дистрибутив Java, поддержка, вероятно, будет слишком скудной, чтобы быть полезной. Нехорошо, чтобы исходный список поддерживал один такой класс, назначение - другое, а код, требующий операции копирования, - третий. Все три класса должны поддерживать один и тот же класс доверенных массивов-сегментов-копий-помощников.
это называется Clojure; D Вы можете прочитать о (conj) здесь: http://clojuredocs.org/clojure.core/conj – sova
его также называют Scala, Haskell и ... (вставьте название любого мощного языка программирования) –