【问题标题】:In an array list, new variable gets added and as well as replaces the existing values with new one在数组列表中,添加新变量并用新值替换现有值
【发布时间】:2012-05-30 12:53:08
【问题描述】:

在数组列表中,当使用

添加新变量时
 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());
        }

【问题讨论】:

    标签: java android arraylist


    【解决方案1】:

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

    Java 按值传递引用,而不是按值传递对象;当您调用pointList.add(i, coord) 时,您正在向列表中添加对coord 对象的引用,而不是coord 对象的新副本。

    相反,您必须在每次循环中创建一个新的PointCoordinates 或任何对象。您不能像在此处那样重用 coord 对象。

    【讨论】:

    • "Java 按值传递引用,而不是按值传递对象" 谢谢 :)
    【解决方案2】:

    这是错误。

     coord.set(x, y);
    

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

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

    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());
        }
    

    【讨论】:

    • 是的,我知道你将单个对象设置在不同的不同索引处。每次设置 XY 时,它都会在同一个对象中替换
    • @jeet.chanchawat 我没听懂你在说什么。
    【解决方案3】:

    这个问题解决了:)

     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());
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-10
      • 2016-03-29
      • 1970-01-01
      • 1970-01-01
      • 2017-11-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多