我有一个对象,它的JSON模式结构如下:
{
"ParentList": [
{
"Parrent": "ListItem0",
"ChildListItems": [
1,
2,
3
]
},
{
"Parrent": "ListItem1",
"ChildListItems": [
1,
2,
3,
4,
5
]
}
]
}
我已将此数据用于具有Parent列表的对象。 父项的每个项目都有一个子项数组列表。
当用户选择任何父母的孩子时。
我将选定的父级交换到第0个位置,并将所选的孩子也交换到第0个位置。假设用户选择了第二个父母的第4个孩子。
{
"ParentList": [
{
"Parrent": "ListItem1",
"ChildListItems": [
4,
2,
3,
1,
5
]
},
{
"Parrent": "ListItem0",
"ChildListItems": [
1,
2,
3
]
}
]
}
但是我希望在交换后不间断地保留原始副本。
处理List的可变性我正在创建一个新的ArrayList,其参考值为实际列表,如下所示
parentListCopy = new ArrayList<>(actualParentList);
交换后,我的actualParentList索引不受影响。
但子数组列表的索引会根据对copyParent的子列表执行的交换而折叠。
{
"ParentList": [
{
"Parrent": "ListItem0",
"ChildListItems": [
1,
2,
3
]
},
{
"Parrent": "ListItem1",
"ChildListItems": [
4,
2,
3,
1,
5
]
}
]
}
答案 0 :(得分:0)
当你这样做时
parentListCopy = new ArrayList<>(actualParentList);
它不会将actualParentList的引用保存到parentListCopy中。相反,它会创建一个新的列表引用,并将actualParentList的元素复制到parentListCopy。
如果要保留引用ID,则需要交换对象的每个字段,而不是交换对象。例如,假设有一个Parent类型的对象,有两个字段a和b。您有一个Parent对象的ArrayList,并希望将索引0与索引3交换。您需要将parents.get(0).a与parents.get(3).a和parents.get(0).b与parent交换。得到(3).B。