Java - ArrayList改变我的数据。为什么?

时间:2016-09-13 11:13:25

标签: java arraylist

我的方法中有一个ArrayList。它包含一类特殊的圆圈。在ColoredCircle内,有一个Point2D.Double p1类型的变量。我必须在不同的坐标系上转换这些坐标。当我这样做时,该方法正在改变我的ArrayList,用变换后的坐标填充它。为什么?我甚至没有在我的转换方法中触摸ArrayList

    public ArrayList<ColoredCircle> algorithm(final ArrayList<ColoredCircle> circleList) {


        ColoredCircle a = circleList.get(0);
        ColoredCircle b = circleList.get(1);
        ColoredCircle c = circleList.get(2);

        for (ColoredCircle cr : circleList) {
            System.out.println("algo"+ cr.getPoint().getX()+" "+cr.getPoint().getY());
        }

        Point2D.Double circleCoordinateC1 = this.transorm_coordinates_circle(b.center, a.getPoint());

        for (ColoredCircle cr : circleList) {
            System.out.println("algo2"+ cr.getPoint().getX()+" "+cr.getPoint().getY());
        }

转化方法:

    public Point2D.Double transorm_coordinates_circle(Point2D.Double circle_center, Point2D.Double point) {

        double x = point.getX() - circle_center.getX();
        double y = (point.getY() - circle_center.getY()) * -1;
        point.setLocation(x, y);

        System.out.println("Point "+point.getX()+" "+point.getY());

        return point;
    }

2 个答案:

答案 0 :(得分:2)

一切按预期工作,List通过引用处理对象。您不克隆圆形对象,因此操纵对象。

列表只存储指向这些对象的指针。

google:通过引用调用,按值调用并在java中读取其详细信息

答案 1 :(得分:1)

看起来,您的tmp2是对circleList ArrayList的引用。既然你没有改变它引用的地方,我假设你总是看到一个特定的一个条目在变化?

在调用“algorithm”之前,您必须显示更多上下文(特别是声明tmp2的位置以及设置它的位置,以确保。