Android应用程序中的奇怪地图行为

时间:2013-08-08 14:04:35

标签: java android map hashmap

我的申请中使用的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};
    }

}

然后在我的主Activity中我有一些初始化:

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] + "}");
}

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

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

我正在尝试一切,我没有看到任何其他内容,所以这就是我在这里问的原因。

有人可以告诉我这里发生了什么,我收到了这个错误吗?

2 个答案:

答案 0 :(得分:0)

我一直在检查它,它对我来说很完美。我会说问题不在于Table的定义方式(显示的代码),而在于你使用它的方式。 将它添加到第一个表后,您可能正在修改MyObject的实例。

答案 1 :(得分:0)

由于您的意见,我发现了错误和解决方案。

事实上,我几次声明myObject,但这是因为如果在addToMap()方法中添加到地图时,这个值不正确。然而,它出来了,这个声明是错误的,我需要直接在我提到的方法中将它添加到地图时,所以现在看起来像这样:

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

此外,我需要在MyObject类中添加适当的构造函数。现在它运作良好。