Java 是否有一种方法可以在使用列表时不更改列表中的原始值?

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个,从列表三

一个列表中有几个列表。。。现在我试着从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个,从列表三的12个列表中减去36个

结果应该是这样的:

清单1:

  • 30,20,10
清单2:

  • -5,-5,-5,36
清单3:

  • 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以不同的方式表达:Java
List
不包含对象;它包含对对象的引用。我在对象类中实现了cloanble接口。效果很好。为了更好地理解,我在这里做了一些研究:这里:谢谢你的提示:)