我有多个ArrayList<String>
“链接”到我用来构建列表视图的自定义适配器中。现在假设它们总共只有两个,以简化。我想对其中一个进行排序,然后将这个新顺序反映到另一个中,以保持列表一致。
这就是我想要做的,但不起作用,最后IndexOutOfBoundsException: Invalid index 0, size is 0
以*
.
// initial declarations:
List<String> filenameEntries = new ArrayList<String>();
List<String> idEntries = new ArrayList<String>();
/* various operations that fill
the two ArrayList here... */
// sorting:
List<String> oldFilenameEntries = new ArrayList<String>();
List<String> oldIdEntries = new ArrayList<String>();
oldFilenameEntries = filenameEntries;
oldIdEntries = idEntries;
idEntries.clear();
Collections.sort(filenameEntries);
for (int i = 0; i < filenameEntries.size(); i++ ) {
for (int j = 0; j < oldFilenameEntries.size(); j++ ) {
if (oldFilenameEntries.get(j) == filenameEntries.get(i)) {
idEntries.add(oldIdEntries.get(j)); // *
}
}
}
我的想法是在旧的 ArrayList 中搜索新元素中的每个元素,然后使用这个“旧”索引重新填充另一个 ArrayList。
(我有另一个“排序的” ArrayList 必须再次的限制idEntries
。这就是我进行这种转移的方式)
有什么建议吗?谢谢。
编辑: 我认为这是一个排序问题,然后我错过了为 ArrayLists 制作副本的正确方法。感谢所有指出错误的人
oldFilenameEntries = filenameEntries;
oldIdEntries = idEntries;
以及为什么。
我接受了更快地找到解决方案的答案。我删除了上面的两行并将前一行更改为
List<String> oldFilenameEntries = new ArrayList<String>(filenameEntries);
List<String> oldIdEntries = new ArrayList<String>(idEntries);
从我所看到的 ATM 似乎一切都按预期工作。