Java 是否有一种方法可以在使用列表时不更改列表中的原始值?
一个列表中有几个列表。。。现在我试着从secound列表中减去第一个列表的值。。。第三个列表中的secound列表的值。。。第四个列表中第三个列表的值,依此类推 示例: 清单1:Java 是否有一种方法可以在使用列表时不更改列表中的原始值?,java,list,for-loop,arraylist,Java,List,For Loop,Arraylist,一个列表中有几个列表。。。现在我试着从secound列表中减去第一个列表的值。。。第三个列表中的secound列表的值。。。第四个列表中第三个列表的值,依此类推 示例: 清单1: 30,20,10 清单2: 25,15,5,36 清单3: 36,95,14,12,44 所以在这个例子中,我们从列表二的25中减去30,从列表二的15中减去20,从列表二的5中减去10。下一步,我们从列表三的36个列表中减去25个,从列表三的95个列表中减去15个,从列表三的14个列表中减去5个,从列表三
- 30,20,10
- 25,15,5,36
- 36,95,14,12,44
- 30,20,10
- -5,-5,-5,36
- 11,80,9,-24,44
for (int i = 0; i < a_l_v_eList.size() - 1; i++) {
List<AccountlinevaluesEntity> firstMonth = a_l_v_eList.get(i);
List<AccountlinevaluesEntity> tempList = new ArrayList<>(a_l_v_eList.get(i + 1));
for (int j = 0; j < tempList.size(); j++) {
AccountlinevaluesEntity nextMonthElementTemp = tempList.get(j);
for (int k = 0; k < firstMonth.size(); k++) {
AccountlinevaluesEntity firstMonthElement = firstMonth.get(k);
if (nextMonthElementTemp.getAccountNumber() == firstMonthElement.getAccountNumber()) {
nextMonthElementTemp.setAmount(subtractAmount(firstMonthElement.getAmount(), nextMonthElementTemp.getAmount()));
//i + 1 so, we don´t overwrite the first element
finalList.get(i + 1).add(nextMonthElementTemp);
break;
}
}
}
}
for(int i=0;i
在List templast=newarraylist行中(a_l_v_eList.get(i+1))代码>
我得到下一张名单。计算完这些值后,将它们添加到新列表中。不幸的是,下次运行循环时,它将不再包含上一个下一个列表的原始值,而是计算值
我的问题是列表中的原始值可能被覆盖
我在for循环之外创建了圣殿骑士。。。并使用List.copyOf()。但问题总是一样的
我希望我能用一种可以理解的方式描述这个问题,你能帮助我 您需要使用其他列表。您可以将操作结果存储在新列表中,或者在需要保持列表状态时创建列表的快照。
因此,对于这种特殊情况,我永远不会更改初始列表的状态,因为您仍然需要它们的值。即使您不更改原始列表,也会更改这些列表中的对象。
您需要制作nextMonthElementTemp
的深度副本,这取决于类AccountlinevaluesEntity
的外观,可以通过不同的方式完成
但在最基本的场景中,您需要替换这一行:
AccountlinevaluesEntity firstMonthElement=firstMonth.get(k)代码>
用这样的方式:
AccountlinevaluesEntity firstMonthElement=firstMonth.get(k.clone()代码>这就是重点,我不想更改初始列表的状态。因此List templast=newarraylist(a_l_v_eList.get(i+1));但这显然是错误的方法。你并没有真正保留对象列表的状态,你只是保留了对对象的引用。尝试使用Why don't you reverse order迭代,即步骤1:List_3-List_2。步骤2:List_2-List_1以不同的方式表达:JavaList
不包含对象;它包含对对象的引用。我在对象类中实现了cloanble接口。效果很好。为了更好地理解,我在这里做了一些研究:这里:谢谢你的提示:)