android - 为什么在另一个 ArrayList<obj> 中添加 ArrayList<object> 会替换先前位置的内部 ArrayList<obj> 的值

标签 android list object arraylist

我有两个对象的 ArrayList(假设是 alOuter 和 alInner)-

ArrayList<ObjectName>alOuter=new ArrayList<>();
ArrayList<ObjectName>alInner=new ArrayList<>();

我需要在 alOuter 中添加 alInner,比如-

alOuter.add(new ObjectName("some value",alInner));

这在这里工作正常,但是当我第二次或第四次添加 alInner 时,先前位置的 alOuter 内部的 alInner 值将替换为 alInner 的当前值。

喜欢-

alInner.add(new ObjectName("1","A"));
alOuter.add(new ObjectName("some value",alInner));

alInner.clear();
alInner.add(new ObjectName("2","B"));
alOuter.add(new ObjectName("some value",alInner));

alInner.clear();
alInner.add(new ObjectName("3","C"));
alOuter.add(new ObjectName("some value",alInner));

现在 alOuter 中每个位置的值是-

"some value",("3","C")

为什么它会替换之前位置的值? 有没有其他方法可以将 ArrayList 添加到另一个 ArrayList 中?

最佳答案

当您将 alInner 添加到 alOuter 中时,您并没有传递副本。您多次将相同的数组列表添加到 alOuter 中。我可以看到您在再次将数组列表添加到 alOuter 之前尝试清除数组列表。但是,这不会创建新的数组列表。因此,一旦您清除了 alInneralOuter 的数组列表就会显示为已更改。要解决此问题,您需要使用 new 创建新的数组列表:

alInner = new ArrayList<>(); // do this in place of clear.

或者,

// this copies the stuff inside alInner to a new array list
alOuter.add(new ObjectName("some value",new ArrayList<>(alInner)));

如您所见,在这种情况下,您必须使用 new 创建一个新对象,因为当您传递对象时,对象通常不会自动创建它们自己。这就是值类型的作用。

关于android - 为什么在另一个 ArrayList<obj> 中添加 ArrayList<object> 会替换先前位置的内部 ArrayList<obj> 的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48679198/

相关文章:

Android - 使用处理程序?

android - 如何将数组添加到 ListView

C# 列表数字排序

java - 为什么 Integer 变量默认赋值为 null?

android - 更改标题后,Google Play Top Charts 应用不再排名?

android - 如果没有用户登录,弹出谷歌登录页面

javascript - 使用 javascript 从 html 列表中过滤元素

Java读取文件并为每个对应行创建一个对象

php - get_object_vars() 与强制转换为数组

c# - C# 中的对象事务