Java 在不影响实际对象的情况下交换列表的列表
我有一个对象,它的JSON模式结构如下:Java 在不影响实际对象的情况下交换列表的列表,java,list,arraylist,collections,swap,Java,List,Arraylist,Collections,Swap,我有一个对象,它的JSON模式结构如下: { "ParentList": [ { "Parrent": "ListItem0", "ChildListItems": [ 1, 2, 3 ] }, { "Parrent": "ListItem1", "ChildListItems": [ 1,
{
"ParentList": [
{
"Parrent": "ListItem0",
"ChildListItems": [
1,
2,
3
]
},
{
"Parrent": "ListItem1",
"ChildListItems": [
1,
2,
3,
4,
5
]
}
]
}
我已将此数据消耗到一个对象中,该对象具有父对象的数组列表。
父项的每个项都有子项的数组列表
当用户选择任何父项的子项时
我将选定的父项交换到第0个位置,并将选定的子项也交换到第0个位置。假设用户选择了第二个父项的第四个子项
{
"ParentList": [
{
"Parrent": "ListItem1",
"ChildListItems": [
4,
2,
3,
1,
5
]
},
{
"Parrent": "ListItem0",
"ChildListItems": [
1,
2,
3
]
}
]
}
但我想在交换后不间断地保留原始副本
为了处理列表的易变性,我创建了一个新的ArrayList,其引用值为实际列表,如下所示
parentListCopy = new ArrayList<>(actualParentList);
}当你这样做的时候
parentListCopy = new ArrayList<>(actualParentList);
parentListCopy=newarraylist(actualParentList);
它不会将actualParentList的引用保存到parentListCopy中。相反,它创建一个新的列表引用,并将actualParentList的元素复制到parentListCopy
如果要保留引用ID,则需要交换对象的每个字段,而不是交换对象。例如,假设有一个类型为Parent的对象,它有两个字段a和b。您有父对象的ArrayList,并希望将索引0与索引3交换。您需要将parents.get(0.a与parents.get(3.a)和parents.get(0.b与parents.get(3.b)进行交换。是否要在ActualPartnerList中进行交换?在您的示例中,子对象正在被交换,但父对象没有被交换。那里的理想行为是什么?两个都应该交换,还是都不交换?您没有对数组列表项进行深度复制。您需要逐个克隆arraylist的内容。请参见此处:可能的副本
parentListCopy = new ArrayList<>(actualParentList);