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

var*_*tis 0 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*
Run Code Online (Sandbox Code Playgroud)

Dav*_*ton 7

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