我有两个对象的 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
之前尝试清除数组列表。但是,这不会创建新的数组列表。因此,一旦您清除了 alInner
,alOuter
的数组列表就会显示为已更改。要解决此问题,您需要使用 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/