Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > ArrayList в ArrayList-очистка


Автор: Coocky 25.6.2013, 16:09
Привет. Только изучаю джава.
Есть два контейнера

Код

ArrayList<HashMap<String, SQLiteData>> container = new ArrayList<HashMap<String, SQLiteData>>();
ArrayList<ArrayList<HashMap<String, SQLiteData>>> list_container = new ArrayList<ArrayList<HashMap<String, SQLiteData>>>();


в одной функции делаю так
Код

container.add(map);


затем вот второй функции
Код

list_container.add(container);
 container.clear();  // пока не нужен


и дальше(о боги!!!!)
Код

for (int i = 0; i < list_container.size(); i++) {

ArrayList<HashMap<String, SQLiteData>> item = list_container.get(i);

for (int y = 0; y < item.size(); y++) {
// а он  ПУСТОЙ!


что происходит? неужели удаляется в java по ссылке( container.clear() )?? Не копируется в контейнер?? А как же быть??
ЧТо за бред?

Автор: danilych 25.6.2013, 16:20
Именно по ссылкам.

Код

list_container.add(container); // вы добавили в list_container ссылку. 
container.clear();  // по другой ссылке вы удалили содержимое

 
Данные у вас в памяти только один раз хранятся, вы к ним обращаетесь по ссылкам

Автор: Pawl 1.7.2013, 18:12
Цитата(Coocky @  25.6.2013,  16:09 Найти цитируемый пост)
list_container.add(container); container.clear();

Чтобы после очистки контейнера в list_container оставались данные, надо сделать так:
Код

list_container.add(new ArrayList<HashMap<String, SQLiteData>>(container))

тогда это будут ссылки на разные объекты

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)