【问题标题】:elements of arraylist duplicatedarraylist 的元素重复
【发布时间】:2011-08-03 08:26:42
【问题描述】:

我创建了一个数组列表并在 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

我已经到处寻找答案,但找不到答案。希望这里有人可以提供帮助。

非常感谢

克莱夫

【问题讨论】:

  • 你能发布代码吗?我真的听不懂你在说什么。
  • 您能给我们提供您在循环外使用的特定代码来显示这些迭代吗?

标签: java android arrays arraylist


【解决方案1】:

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

您需要确保在每次迭代中实际分配一个新数组。例如:应该有这样一行:

recordArray = new String[size];

在你的循环中。

【讨论】:

  • 非常感谢。那是我的问题。我改变了我的代码,它工作得很好。再次感谢
【解决方案2】:

我强烈怀疑您每次通过循环时都会添加 same 字符串数组。您应该每次都创建一个 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 个不同数组。

【讨论】:

  • 非常感谢。那是我的问题。我完全被以下事实弄糊涂了:当我尝试从 Do-WHILE 循环中的列表中提取字符串时,它工作得很好,但是当我使用相同的循环来提取字符串但在 DO-WHILE 循环之外时,我得到了相同的字符串一遍又一遍。非常感谢您的帮助
猜你喜欢
  • 2013-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-28
  • 1970-01-01
  • 2016-10-05
  • 1970-01-01
相关资源
最近更新 更多