Создание копии TreeSet или любых коллекций по этому вопросу. - PullRequest
1 голос
/ 24 июня 2011

У меня есть набор деревьев пользовательских объектов. Каждый пользовательский объект состоит из int a, int b, String c и double d. Допустим, у меня есть объект treeSet t1, содержащий 10 таких пользовательских объектов. У меня также есть другой объект TreeSet t2, который пуст. Каков наилучший способ копирования объектов из набора деревьев t1 в набор деревьев t2 ... Я хочу новые объекты в t2, а не просто ссылки на объекты в t1.one способ создать 10 новых объектов в t2 и скопировать значения всех a, b, c и d каждого из 10 объектов в t1 и тех в t2. Есть ли лучший способ?

Ответы [ 5 ]

2 голосов
/ 24 июня 2011
for (Item item : collection) {
    newCollection.add(BeanUtils.cloneBean(item));    
}

, где BeanUtils от commons-beanutils

2 голосов
/ 24 июня 2011

Этот метод известен как "глубокое копирование", и есть хороший вопрос о переполнении стека здесь .

Текущие два лучших ответа дают две хорошие перспективы:

  1. Сериализация ваших объектов , а затем десериализация их (эффективно, но не на 100% надежно) - ссылка для ответа
  2. или вам просто нужно пройти весь объект и сделать это вручную (настолько надежно, насколько это возможно, но не очень просто) - ссылка для ответа
1 голос
/ 24 июня 2011
  1. Переопределите метод clone () в пользовательском объекте
  2. Перебор исходной коллекции
  3. Добавить клонированные предметы в предназначенную коллекцию.
0 голосов
/ 24 июня 2011

Вы уже получили свой ответ.

Однако этот процесс лучше всего реализовать в методе clone ().Таким образом, весь ваш объект должен переписать этот метод.

См. Пример здесь: http://www.roseindia.net/java/example/java/util/clone-method-example-in-java.shtml

0 голосов
/ 24 июня 2011

Зависит от того, что вы подразумеваете под лучше. Лучшее решение - сделать объект неизменным и просто скопировать ссылки.

Альтернативой является создание или запись конструктора копирования. Конструктор копирования может использовать отражения для копирования всех полей.

Для имеющихся у вас типов полей вы можете сделать Object Cloneable и использовать методы clone (). (Поскольку поля являются примитивами или неизменяемыми)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...