ArrayLists,在一个ArrayList上设置值会更改另一个ArrayList上的值

时间:2011-10-16 21:42:22

标签: java arraylist

正如标题所说,我有两个ArrayLists。奇怪的是,在一个arraylist上设置一个值会改变另一个arraylist的值。

一些信息:这些是Entry类型的ArrayLists,每个都包含一个数量和一个值(这是你在括号中看到的)。我正试图改变这个数组: [(5,2)(2,5)(3,2)]

进入这些[(1,2)]和[(4,2)(2,5)(3,2)]。在这种情况下i == 1,而remainingAmt == 1.

ArrayList<Entry> firstHalf = new ArrayList<Entry>();
    ArrayList<Entry> secondHalf = new ArrayList<Entry>();

    for(int j = 0; j<=i;j++){
        firstHalf.add(rleAL.get(j));
    }
    for(int k = i; k<rleAL.size(); k++){
        secondHalf.add(rleAL.get(k));
    }
    System.out.println(firstHalf);//gives (5,2)
    firstHalf.get(i).setAmount(remainingAmt);
    System.out.println(firstHalf);//gives (1,2) *CORRECT*
    secondHalf.get(0).setAmount(rleAL.get(i).getAmount() - remainingAmt);
    System.out.println(firstHalf);//gives (0,2) *WRONG*

2 个答案:

答案 0 :(得分:7)

没有什么不寻常的 - 如果在列表之间共享基础对象,则一个对象的更改将反映在另一个对象中。如果需要列表是独立的,则需要在每个列表中使用不同的对象,方法是从头开始创建新对象,或者将初始对象复制到列表#2中的新对象。

答案 1 :(得分:0)

这里唯一的问题是你的头衔。你根本没有“在一个ArrayList上设置一个值”。您已在对象中设置了值,该对象是两个ArrayLists的成员,因此它当然会显示在两者中。