【问题标题】:Strange map behavior in Android applicationAndroid应用程序中的奇怪地图行为
【发布时间】:2013-08-10 06:57:20
【问题描述】:

我的应用程序中使用的Map 有一些奇怪的问题。

我有一个对象列表 - Table。每个对象都有一个字段,该字段是另一个类的对象的映射:

public class Table {

    private Map<Integer, MyObject> objectsMap = new HashMap<Integer, MyObject>();

    public void addToMap(int i, MyObject mOrder)
    {
        objectsMap.put(i, mOrder);
    }

    public MyObject getObject(int poz)
    {
        return objectsMap.get(poz);
    }

}

public class MyObject {

    private int info1;
    private int info2;

    public void setInfo(int i1, int i2)
    {
        this.info1 = i1;
        this.info2 = i2;
    }

    public int[] getInfos()
    {
        return new int[]{this.info1, this.info2};
    }

}

然后在我的主要活动中我进行了一些初始化:

private List<Table> tableList = new ArrayList<Table>();

//...

public void initTableObject(Table myTable)
{
    MyObject newObject = new MyObject();
    newObject.setInfo(1,2);
    myTable.addToMap(1, newObject);
    MyObject newObject = new MyObject();
    newObject.setInfo(3,4);
    myTable.addToMap(2, newObject);
    MyObject newObject = new MyObject();
    newObject.setInfo(5,6);
    myTable.addToMap(3, newObject);
    MyObject newObject = new MyObject();
    newObject.setInfo(7,8);
    myTable.addToMap(4, newObject);
}

问题是当我想检查值时:

for (Table table : tableList) {
    int[] info = table.getObject(4).getInfos();
    Log.d("TAG","4: {" + info[0] + ", " + info[1] + "}");
}

当我有 1 个表对象时,一切正常。当我有 2 个或更多对象时,问题就开始了。如果在一些交互之后有 2 个元素(在这种情况下并不重要),我有问题。

每次,对象映射中的最后一个对象 - 即第一个 Table 对象上的 newObject 数字 4 的值等于 2 个元素的第一个对象值。第二个 Table 对象及其 MyObject 对象都可以。

我什么都试过了,但我没有看到其他任何东西,所以这就是我在这里问的原因。

有人能告诉我这是怎么回事吗?

【问题讨论】:

  • 根据您的代码,您多次声明 newObject 。我认为您需要编辑问题代码。
  • 我第二个@LuisSep 编辑你的代码。就目前而言,我们无法为您提供帮助。提供的任何东西都是猜测。这是我的:)。这听起来像是您正在修改映射到其他地方的 4 的 MyObject 值。同样,这只是一个猜测。

标签: java android map hashmap


【解决方案1】:

我一直在检查它,它非常适合我。我想说问题不在于定义 Table 的方式(显示的代码),而在于您使用它的方式。 在将 MyObject 实例添加到第一个表之后,您可能正在修改它。

【讨论】:

    【解决方案2】:

    感谢您的 cmets,我发现了一个错误和解决方案。

    事实上,我已经多次声明了 myObject,但这是因为如果在 addToMap() 方法中添加到地图时,如果不是这样的值是错误的。然而,结果发现,这个声明是错误的,当我用上述方法将它添加到地图时,我需要直接这样做,所以现在它看起来像这样:

    public void addToMap(int i, MyObject mOrder)
    {
       objectsMap.put(i, new MyObject(mOrder));
    }
    

    我还需要在 MyObject 类中添加适当的构造函数。现在它运行良好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-30
      • 1970-01-01
      • 2017-05-29
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      • 2016-11-02
      相关资源
      最近更新 更多