2016-06-29 4 views
2

Здравствуйте, у меня есть класс для глобальных переменных. Одна из функций внутри этого класса используется для очистки одного из моих массивов ArrayList. Единственная проблема в том, что она очищает два моих списка ArrayLists, и я не могу понять, почему. Все, что нужно очистить, это m_listItems.ArrayList <ArrayList <String>> очищается при очистке другого ArrayList <String>

Перед Clear Запускает: http://i.stack.imgur.com/dN5n4.png

После Ясный трассы: http://i.stack.imgur.com/5eKfj.png

Эта функция добавляет ArrayList "m_listItems" в двойной список Array.

public void addGrouptoList(){ 
    ArrayList myArray = Global.m_listItems; 
    Global.groupCollection.add(myArray); 
} 

Эта функция должна очистить ТОЛЬКО m_listItems, но она очищает как:

public void ClearNameList(){ 
    Global.m_listItems.clear(); 
} 

Это, как я создал

private static ArrayList<ArrayList<String>> groupCollection= new ArrayList<>(); 
private static ArrayList<String> m_listItems = new ArrayList<String>(); 

Любая помощь в двух ArrayList был бы весьма признателен. Будь то работа или почему ее беспорядок!

EDIT Я сделал много, и прибегая к помощи я думаю, что проблема в том, что я делаю добавить (global.m_list_items), поэтому, когда я ясно m_list_items, она очищает его в моем другом массиве также ... есть ли работа для этого? Я читал, что Static - это то, что вызывает проблему, но мне нужно это для моей глобальной переменной. Кажется, я не нашел обходного пути в google.

Спасибо!

+0

Почему вы сделали arraylist глобальным? –

+0

В двойном списке массивов хранятся группы, в которых хранятся имена каждого члена группы. Мне нужно было получить доступ к этим данным по всем видам деятельности, и единственный способ, которым я мог это найти, - это создать глобальный класс. Я уверен, что у них намного лучшие способы сделать это (и я готов слушать), но я начинающий программист для Java android и делаю классный проект. –

ответ

2

массив не содержит объектов, но указатели на объекты создание нового массива и добавление объекта во второй массив не делают копию объектов! Изменение объекта в одном массиве вы изменяете его во втором

и нужно сделать

new ArrayList<>(oldArray); 

подробнее о мелкой и глубокой копии

в приведенном выше примере мы используем конструктор копирования другой метод является использовать

http://cs-fundamentals.com/java-programming/java-arrays-clone-shallow-deep-copy.php

How do I copy an object in Java?

Deep copy, shallow copy, clone

КСТАТИ:

мне нравится ваш стиль :) полное нарушение всех правил & конвенции :) если и нужна помощь кал мне в любое время !!!

+0

Я, вероятно, возьму вас на это предложение :) К сожалению, я не нарушаю все правила и условности! Я нахожусь в курсе Software Engineering, где цель этого класса - практиковать жизненный цикл разработки программного обеспечения. Это означает, что весь класс в основном разрабатывает приложение ... кроме того, что у меня нет Java-опыта. Так что я должен был учить себя и google все до сих пор, и я должен сказать, что это не был приятный опыт! Я ценю помощь, потому что я застрял в этой проблеме в течение ~ 5 часов :( –

+0

@JoeyVagedes не стесняйтесь просить его приятно видеть, что вы пытаетесь учиться :) мы все постоянно учимся на протяжении всей нашей жизни. Java - это хороший язык, который поможет вам с основами, и вы увидите его легким – ceph3us

0

Global.m_listItems - единственный объект, поэтому, когда вы добавляете его в Global.groupcollections, вы не создаете новый объект, вы указываете его только на один и тот же объект. Следовательно, когда вы уничтожаете объект в одном месте itGlobal.m_listItems, вы остаетесь без объекта вообще. Вам необходимо создать новый объект, который имеет те же данные, что и Global.m_listitems.

Смежные вопросы