你好,我有一个全局变量类。该类中的一个函数用于清除我的 ArrayList 之一。唯一的问题是它正在清除我的两个 ArrayLists,我不知道为什么。它应该清除的只是 m_listItems。
清除运行之前: http://i.stack.imgur.com/dN5n4.png
清除运行后:http://i.stack.imgur.com/5eKfj.png
此函数将 ArrayList“m_listItems”添加到双数组列表。
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>();
任何帮助将不胜感激。无论是变通还是为什么搞砸了!
编辑 我做了很多谷歌搜索,我认为问题是因为我正在添加(global.m_list_items),所以当我清除 m_list_items 时,它也会在我的其他数组中清除它......是否有解决这个问题的方法?我读到 Static 是导致问题的原因,但我需要它作为我的全局变量。我似乎无法在谷歌中找到解决方法。
谢谢!
最佳答案
数组不包含对象,而是指向对象的指针 制作新数组并将对象添加到第二个数组不会复制对象!修改一个数组中的对象就是在第二个数组中修改它
你需要做
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
顺便说一句:
我喜欢你的风格 :) 完全违反所有规则和惯例 :) 如果你需要帮助随时给我打电话!!!
关于java - ArrayList<ArrayList<String>> 在清除不同的 ArrayList<String> 时被清除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38089054/