[英]Strange map behavior in Android application
我在应用程序中使用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个Table对象时,一切正常。 当我有2个或更多对象时,问题就开始了。 如果在进行一些交互后有2个元素(在这种情况下不重要),我会遇到问题。
每次,对象映射中的最后一个对象-第一个Table对象上的newObject
number 4的值等于2个元素的第一个对象值。 第二个Table对象及其MyObject对象正常。
我正在尝试所有操作,但没有看到其他任何内容,因此这就是我在这里询问的原因。
有人可以告诉我这里发生了什么错误吗?
我一直在检查它,它非常适合我。 我会说问题不在于表的定义方式(显示的代码),而在于您使用它的方式。 将MyObject实例添加到第一个表后,您可能正在修改它。
感谢您的评论,我发现了错误和解决方案。
实际上,我已经声明了myObject几次,但这是因为,如果不这样,则在addToMap()
方法addToMap()
值添加到地图时,此值是错误的。 但是,结果表明,该声明是错误的,当我将其添加到上述方法中的地图时,我需要直接进行声明,因此现在看起来像这样:
public void addToMap(int i, MyObject mOrder)
{
objectsMap.put(i, new MyObject(mOrder));
}
另外,我需要在MyObject类中添加适当的构造函数。 现在,它运行良好。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.