Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.11.2016, 14:49   #1
AlexOrlo
Пользователь
 
Регистрация: 27.10.2016
Сообщений: 26
По умолчанию Глубокое клонирование Arraylist

Народ, понимаю, что вопрос уже давно избитый.
Сколько не пытался, так и не понял как это сделать.
Во всех примерах клонируют объект, создают для него интерфейс.. На моём этапе познаний всё чересчур запутанно.
Есть переменная типа: ArrayList<ArrayList<Float>> data;
(то есть список списков типа флоат).
Нужно клонировать в другой ArrayList<ArrayList<Float>> cloned_data;
Как это сделать?
Нашёл библиотеку cloning-1.9.3, но у нее есть глюк, над которым автор еще работает, что не позволяет мне её использовать.
На выходе я должен получить cloned_data, и при изменении его содержимого, это не должно сказываться на data.

Заранее спасибо!
AlexOrlo вне форума Ответить с цитированием
Старый 26.11.2016, 14:52   #2
AlexOrlo
Пользователь
 
Регистрация: 27.10.2016
Сообщений: 26
По умолчанию

Неужели никто с этим не сталкивался?
AlexOrlo вне форума Ответить с цитированием
Старый 26.11.2016, 14:59   #3
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Так а что мешает пройти в цикле копируя в новый список?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 26.11.2016, 15:49   #4
AlexOrlo
Пользователь
 
Регистрация: 27.10.2016
Сообщений: 26
По умолчанию

Всмысле? То есть нужно перебрать все переменные списка?
Я думал, что есть способы клонирования уже гттовые..
Например при обычном клонирование ни чего перебирать не нужно..
AlexOrlo вне форума Ответить с цитированием
Старый 26.11.2016, 15:58   #5
AlexOrlo
Пользователь
 
Регистрация: 27.10.2016
Сообщений: 26
По умолчанию

Вот нарыл инфу.. http://howtodoinjava.com/core-java/c...oning-in-java/
используют super.clone, а не clone. Но опять же, они определяют метод для клонирования.
Но пример клонирования объекта.
arraylist так же объект, но как ему этот супер клон определить..?
AlexOrlo вне форума Ответить с цитированием
Старый 26.11.2016, 16:23   #6
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

"обычное клонирование" это как?

Для Float не нужен clone, он и так immutable.

Поэтому ArrayList<Float> вроде можно скопировать через
Код:
new ArrayList<Float>(oldList)
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 26.11.2016, 16:43   #7
AlexOrlo
Пользователь
 
Регистрация: 27.10.2016
Сообщений: 26
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
"обычное клонирование" это как?

Для Float не нужен clone, он и так immutable.

Поэтому ArrayList<Float> вроде можно скопировать через
Код:
new ArrayList<Float>(oldList)
Нет, так я уже пробовал... При этом передается ссылка, а не копируется само значение...
Интересует другой момент: если оригинальный список объявить как static..
Можно ли будет его просто скопировать?
Сейчас просто нет доступа к компу.. только вечером смогу поковыряться..
AlexOrlo вне форума Ответить с цитированием
Старый 26.11.2016, 16:50   #8
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Значение чего? экземпляры Float immutable, их состояние никак не поменять.

Речь о ArrayList<Float>.
А первый список (ArrayList<ArrayList...>) да, просто в цикле можно создать новые.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 26.11.2016, 16:54   #9
AlexOrlo
Пользователь
 
Регистрация: 27.10.2016
Сообщений: 26
По умолчанию

Обычный клон, это который поверхностный, и он для моей цели не подходит.
Нужен метод глубокого клонирования...
То есть нужно пеиеопределить метод клон для объекта arraylist, так, что бы он стал глубоким.
А как именно это сделать я не врубаю.. хоть при еров в сети много, но они все на объекты созданные автором и мне не понятно как их применить у меня...
AlexOrlo вне форума Ответить с цитированием
Старый 26.11.2016, 17:04   #10
AlexOrlo
Пользователь
 
Регистрация: 27.10.2016
Сообщений: 26
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Значение чего? экземпляры Float immutable, их состояние никак не поменять.

Речь о ArrayList<Float>.
А первый список (ArrayList<ArrayList...>) да, просто в цикле можно создать новые.
Ок, я попробую...
А что вы скажите на счет преписания к оригиналу static ?
Это как то может помочь?
То есть:
static ArrayList<ArrayList<Float>> original
.
.
какието действия по заполнению.

Потом в другом методе этого же класса
ArrayList<ArrayList<Float>> clon_data;
clon_data=original;

Это как то возможно?
AlexOrlo вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
клонирование одностраничника polinaemma Фриланс 1 11.03.2016 05:23
Qt, клонирование QObject pproger Qt и кроссплатформенное программирование С/С++ 0 28.01.2012 16:02
Клонирование компонента chandrasecar Общие вопросы Delphi 8 31.10.2010 17:57
Клонирование Windows XP DJ HITMAN Windows 6 20.08.2010 13:35
Глубокое копирование Chor Общие вопросы .NET 6 12.06.2009 01:19