的ArrayList <数组列表<字符串>&GT;清除不同的ArrayList <string>时被清除

时间:2016-06-29 01:55:13

标签: java android arraylist clear

您好我有一个全局变量类。该类中的一个函数用于清除我的一个ArrayList。唯一的问题是,它正在清除我的两个ArrayLists,我无法弄清楚原因。所有它都要清除m_listItems。

在清除运行之前: http://i.stack.imgur.com/dN5n4.png

清除运行后:http://i.stack.imgur.com/5eKfj.png

此函数添加了ArrayList&#34; m_listItems&#34;到双数组列表。

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

此函数应仅清除m_listItems,但它会清除两者:

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

这就是我创建两个ArrayList的方法

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

非常感谢任何帮助。无论是解决问题还是为什么搞砸了!

修改 我已经做了很多谷歌搜索,我认为这个问题是因为我正在做add(global.m_list_items),所以当我清除m_list_items时,它会在我的其他数组中清除它...是否有解决方法这个?我读到静态是导致问题的原因,但我需要为我的全局变量。我似乎无法在谷歌中找到解决方法。

谢谢!

2 个答案:

答案 0 :(得分: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

btw:

我喜欢你的风格:)完全违反所有规则&amp;惯例:)如果你需要随时帮助我!

答案 1 :(得分:0)

Global.m_listItems是唯一的对象,因此当您将其添加到Global.groupcollections时,您不会创建新对象,而只是将其指向同一个对象。 因此,当您在一个地方itGlobal.m_listItems中销毁对象时,您根本没有任何对象。 您需要创建一个与Global.m_listitems具有相同数据的新对象。

相关问题