Несколько дней назад я ответил на интересный вопрос о SO о HashSet
. Возможное решение заключалось в клонировании хеш-набора, и в своем ответе я предложил сделать что-то вроде этого:
HashSet original = ...
HashSet clone = new HashSet(original);
Хотя этот подход довольно прост, я подозреваю, что он очень неэффективен: конструктор нового HashSet
необходимо отдельно добавить каждый элемент из исходного хеш-набора, а проверить, нет ли его еще . Это явно пустая трата времени: поскольку исходная коллекция представляет собой ISet
, она гарантированно не будет содержать дубликатов. Должен быть способ воспользоваться этим знанием ...
В идеале, HashSet
должен реализовывать ICloneable
, но, к сожалению, это не так. Я также проверил с помощью Reflector, сделал ли конструктор HashSet
что-то конкретное, если исходная коллекция была хеш-набором, но это не так. Вероятно, это можно было бы сделать, используя отражение в частных полях, но это было бы уродливым взломом ...
Итак, кто-то придумал умное решение для более эффективного клонирования хеш-набора?
(Обратите внимание, что этот вопрос чисто теоретически, мне не нужно делать это в реальной программе)