正如标题所说,我有两个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)
没有什么不寻常的 - 如果基础对象在列表之间共享,则一个对象的更改将反映在另一个对象中.如果需要列表是独立的,则需要在每个列表中使用不同的对象,方法是从头开始创建新对象,或者将初始对象复制到列表#2中的新对象.
| 归档时间: |
|
| 查看次数: |
994 次 |
| 最近记录: |