![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
Reptor |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1213 Регистрация: 29.12.2004 Репутация: нет Всего: 0 |
Проблема вот в чём:
есть какойто список private
Если одному листу присваивать такой же лист т о при изменении одного меняется и 2-ой лист так как копируется не содержимое а просто ссылка на объект - это если я правильно понял. Так а как сделать что б создавался абсолютно новый лист. Делаю так и всеровно не выходит. Меняю старый, меняется и новый и наоборот
Как это побороть? |
||||
|
|||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
clone()
(но объекты в новом листе будут те же самые) -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
Reptor |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1213 Регистрация: 29.12.2004 Репутация: нет Всего: 0 |
this.list = ( ArrayList<X>)list.clone(); не помогло. Всеровно если менять объекты одного листа то в 2-ом они тоже меняются, ну и наоборот |
|||
|
||||
cube |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 291 Регистрация: 11.4.2007 Репутация: 2 Всего: 3 |
тогда ты должен у каждого объекта Х в ArrayList'e использовать clone() |
|||
|
||||
Reptor |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1213 Регистрация: 29.12.2004 Репутация: нет Всего: 0 |
так что выходит надо итератором проходить по листу и делать клоне каждого объекта а потом this.list.add( Object.clone() ) ??
мне кажется что такое копирование больших листов повешает всё приложение Это сообщение отредактировал(а) Reptor - 1.7.2008, 17:23 |
|||
|
||||
Orange |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 6.9.2004 Где: Russia, Moscow Репутация: 4 Всего: 5 |
а Collections.copy(list1, list2) не подойдёт?
(ну или делай свою реализацию cloneable) Это сообщение отредактировал(а) Orange - 1.7.2008, 18:19 --------------------
Пару дней назад я познакомился с мальчиком...... |
|||
|
||||
Reptor |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1213 Регистрация: 29.12.2004 Репутация: нет Всего: 0 |
Orange, не знаю подойдёт или нет... не пробовал.. я так понимаю это с common-collections.. надо посмотреть как там реализовано..
Это сообщение отредактировал(а) Reptor - 1.7.2008, 18:22 |
|||
|
||||
Orange |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 6.9.2004 Где: Russia, Moscow Репутация: 4 Всего: 5 |
И да, у Эккеля было по поводу глубокого клонирования достаточно подробно описанно --------------------
Пару дней назад я познакомился с мальчиком...... |
|||
|
||||
Reptor |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1213 Регистрация: 29.12.2004 Репутация: нет Всего: 0 |
у меня при таком подходе ошибка
Exception occurred during event dispatching: java.lang.IndexOutOfBoundsException: Source does not fit in dest |
|||
|
||||
ivg |
|
|||
![]() Autonomous R&D ![]() ![]() Профиль Группа: Участник Сообщений: 686 Регистрация: 8.2.2006 Где: Екатеринбург Репутация: 33 Всего: 81 |
||||
|
||||
powerOn |
|
||||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 47 Всего: 159 |
если посмотреть в исходники Collections.sort, то можно узнать много интересного:
тот лист, в который будет вестись копирование, уже должен содержать элементов не меньше, чем в листе-источнике. Но, честно говоря, зачем такое условие нужно я плохо себе представляю. |
||||
|
|||||
Platon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1801 Регистрация: 25.4.2006 Репутация: 16 Всего: 40 |
На сколько могу судить по исходному коду Collections.copy тоже не подходит, он копирует только ссылки.
|
|||
|
||||
powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 47 Всего: 159 |
||||
|
||||
Kangaroo |
|
|||
![]() AA - Aussie Animal ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2042 Регистрация: 7.10.2006 Где: US Репутация: 21 Всего: 104 |
Наверное, чтобы максимально оптимизировать следующий за этой проверкой код. -------------------- Lost.... |
|||
|
||||
COVD |
|
||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 17 Всего: 43 |
конечно. Или вы это вручную должны сделать (если это реально нужно и время не ждет), или найдете готовый библиотечный класс, где то же самое уже реализовано. Но никакого чуда там не будет.
Есть программистская заповедь: "Не плодите сущности". Из которой следует, что вам лучше поискать другое решение. |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |