在数组列表中,添加新变量,并用新值替换现有值

时间:2012-05-30 12:53:09

标签: java android arraylist

在数组列表中,使用

添加新变量时
 pointList.add(i , coord); 

添加新变量,并用新值替换现有值。 如何阻止这些替换变量?

for(int i=0;i<coordinateArray.length();i++)
        {
            brokenArray= coordinateArray.getJSONObject(i);  
            x=brokenArray.getInt("x");
            y=brokenArray.getInt("y");

            Log.d("x", " "+i+ " "+x );
            Log.d("y", " "+i+ " "+y );

            coord.set(x, y);
            pointList.add(i , coord);

            Log.d("pointList", pointList.toString());
        }

3 个答案:

答案 0 :(得分:6)

根据您提供的代码,您每次都在同一个对象上使用coord.set(x, y)。将对象添加到List 不会复制它

Java按值传递引用,而不是按值传递对象;当您致电pointList.add(i, coord)时,您要将coord对象的引用添加到列表中,而不是coord对象的新副本。

相反,每次循环时,必须创建一个新的PointCoordinates或任何对象。您无法像在此处一样重复使用coord对象。

答案 1 :(得分:1)

这是错误。

 coord.set(x, y);

您正在将循环中的值设置为同一对象。

在循环内创建coord对象并添加它。

for(int i=0;i<coordinateArray.length();i++)
    {
        brokenArray= coordinateArray.getJSONObject(i);  
        x=brokenArray.getInt("x");
        y=brokenArray.getInt("y");

        Log.d("x", " "+i+ " "+x );
        Log.d("y", " "+i+ " "+y );
        Coordinate coord = new Coordinate ();
        coord.set(x, y);

        pointList.add(i , coord);

        Log.d("pointList", pointList.toString());
    }

答案 2 :(得分:0)

这解决了问题:)

 for(int i=0;i<coordinateArray.length();i++)
        {
            brokenArray= coordinateArray.getJSONObject(i);  
            x=brokenArray.getInt("x");
            y=brokenArray.getInt("y");

            Log.d("x", " "+i+ " "+x );
            Log.d("y", " "+i+ " "+y );
            Point coord = new Point();
            coord.set(x, y);
            pointList.add(i , coord);
            coord=null;
            Log.d("pointList", pointList.toString());
        }