我想将两个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);

09-11 20:23