arraylist的元素重复

时间:2011-04-11 19:40:28

标签: java android arrays arraylist

我创建了一个arraylist并在DO While循环中添加了元素(字符串数组)。我使用以下内容添加元素:

tempList.add(recordArray); //- recordArray is a String[]

//ArrayList<String[]> tempList = new ArrayList<String[]>();// is declared in the activity before onCreate method

如果我使用以下代码检查DO WHILE循环内的数组:

aStringArray = tempList.get(index);
Log.i(TAG,"aStringArray[0] = " + aStringArray[3]);
index++;

我为添加到arrayList的3个数组元素中的每一个都获得了正确的字符串。

问题是当我尝试在DO WHILE循环之外使用相同的代码时,将为3次迭代中的每一次显示相同的字符串。

总而言之,在DO WHILE循环中,我得到以下结果:

1st iteration -  aStringArray[3] - displays "100350
2nd iteration -  aStringArray[3] - displays "100750
3rd iteration -  aStringArray[3] - displays "100800
在DO WHILE循环之外的

我得到以下内容:

1st iteration -  aStringArray[3] - displays "100800
2nd iteration -  aStringArray[3] - displays "100800
3rd iteration -  aStringArray[3] - displays "100800

我已经搜遍了所有的答案,但找不到答案。希望有人可以提供帮助。

非常感谢

克莱夫

2 个答案:

答案 0 :(得分:2)

我强烈怀疑你每次进行循环时都会添加相同的字符串数组。您应该每次都创建一个 new 字符串数组。

不要忘记该列表仅包含引用。所以我的猜测是你的代码看起来像这样:

ArrayList<String[]> tempList = new ArrayList<String[]>();
String[] recordArray = new String[4];

for (int i = 0; i < 10; i++)
{
    recordArray[0] = "a" + i;
    recordArray[1] = "b" + i;
    recordArray[2] = "c" + i;
    recordArray[3] = "d" + i;
    tempList.add(recordArray);
}

最终得到10个相同引用的ArrayList。相反,你想要这个:

ArrayList<String[]> tempList = new ArrayList<String[]>();

for (int i = 0; i < 10; i++)
{
    String[] recordArray = new String[4];
    recordArray[0] = "a" + i;
    recordArray[1] = "b" + i;
    recordArray[2] = "c" + i;
    recordArray[3] = "d" + i;
    tempList.add(recordArray);
}

这样你就可以在列表中引用10个不同的数组。

答案 1 :(得分:0)

你还没有发布你的代码,所以我不得不猜测,但这听起来好像是你多次向列表中添加String[],并且只是在循环的每次迭代中修改单个数组实例。

您需要确保在每次迭代时实际分配一个新数组。例如:应该有类似的行:

recordArray = new String[size];

在你的循环中。