【问题标题】:ArrayList<ArrayList<String>> is being cleared when clearing a different ArrayList<String>清除不同的 ArrayList<String> 时正在清除 ArrayList<ArrayList<String>>
【发布时间】:2016-10-31 12:56:23
【问题描述】:

您好,我有一个全局变量类。该类中的一个函数用于清除我的 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 时,它也会在我的另一个数组中清除它......有解决方法吗?我读到静态是导致问题的原因,但我的全局变量需要它。我似乎无法在 google 中找到解决方法。

谢谢!

【问题讨论】:

  • 为什么将arraylist设为全局?
  • 双数组列表存储组,其中存储每个组成员的名称。我需要跨活动访问这些数据,而我能找到的唯一方法是使用全局类。我确信他们是更好的方法来做到这一点(我愿意听),但我是 Java android 的新手程序员并且正在做一个类项目。

标签: java android arraylist


【解决方案1】:

数组不包含对象,而是指向对象的指针 创建新数组并将对象添加到第二个数组不要复制对象!修改一个数组中的对象,您将在第二个数组中修改它

你需要做的

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经验。所以到目前为止,我不得不自学并用谷歌搜索一切,我必须说这不是一次愉快的经历!感谢您的帮助,因为我在这个问题上停留了大约 5 个小时 :(
  • @JoeyVagedes 不要犹豫,很高兴看到你努力学习 :) 我们一生都在不断地学习。 Java 是一种不错的语言,尝试基础知识,您会发现它很容易
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2013-04-06
    • 1970-01-01
    • 2019-12-18
    • 1970-01-01
    • 2015-12-07
    • 2013-07-02
    • 2017-08-30
    • 2015-08-06
    • 2014-07-31
    相关资源
    最近更新 更多