我想将两个arraylist合并到一个新的arraylist中,并遍历该列表。在对新的数组列表执行操作之前,我想将一些值乘以-1。但是问题是,当使用addAll()时,我还会将旧的arraylist倍增。
public Polynoom subtract (Polynoom that) {
Polynoom subtract = new Polynoom();
subtract.termen.addAll(that.termen);
for (int i = 0; i < subtract.termen.size(); i++) {
subtract.termen.get(i).coef = subtract.termen.get(i).coef * -1;
}
subtract.termen.addAll(this.termen);
Collections.sort(subtract.termen);
subtract.removeDoubles();
return subtract;
}
我的Polynoom类如下所示:
class Polynoom implements PolynoomInterface {
ArrayList<Paar> termen = new ArrayList<Paar>();
Polynoom() {
termen = new ArrayList<Paar>();
}
}
问题是(我认为):当使用addAll()时,它会创建REFERENCES而不是新副本,因此更改元素将同时更改两者。解决这个问题的好方法是什么?
我当然可以创建一个新的配对,而不是Polynoom,然后将此配对添加到新的Polynoom中,但是我认为这并不是很好的代码。有人有更好的主意吗?
最佳答案
尝试这个
subtract.termen = new ArrayList<Paar>(that.termen);
在循环之前删除subract.termen.addall();
或者您也可以创建新对象
ArrayList <Paar> temp = new ArrayList<Paar>(that.termen);
subtract.termen.addAll(temp);