我尝试分配全局变量的数据并更改局部变量的数据,但是当我更改局部变量的结构时,全局变量会变为好。
private void remove(Message M) {
int p = list.lastIndexOf(M);
List<Message> x = list;
list.remove(p);
indexedMessages.remove(M.getMessageid());
notifyItemRemoved(p);
notifyItemRangeChanged(p, list.size());
// Removing the following items from "x" also causes the elements to be removed from recycleView.
x.remove(0);
x.remove(x.size() - 1);
}
我不理解的两件事:
无论如何,在原始&#34;列表&#34; (私人清单),第一个&amp;最后的项目只是占位符。从此列表中删除某个项目时,我想在没有占位符的情况下存储该列表的新副本。
每次创建适配器时都会添加占位符。
答案 0 :(得分:3)
在制作本地变量x
之前,
制作局部变量x
后,
从x
删除元素后,
因为变量x
是对List<Message>
类型的对象list
的指针/引用。因此,对x
的更改将同时应用于list
,因为它们都指向同一个对象。
如果要在不影响全局变量的情况下对x
进行更改,则必须使x
指向新对象并将全局变量的所有内容复制到{{1} }。请注意,这可能是多余的。例如,这将起作用,
x
由于评论中指出的原因,这是多余的,因为
List<Message> x = new ArrayList<Message>();
//modify x here
可以重写为List<Message> x = ArrayList<Message>()
,因为可以从List<Message> x = ArrayList<>()
推断出对象类型,因此无需重新设置如果我们有:
List<Message>
我们可以将“a”的内容复制到“b”中,如下所示。
List<String> a = new ArrayList<String>();
a.add("a");
a.add("b");
a.add("c");