我有一个名为PhotoArrayList的ArrayList。它包含像“picture1.jpg,picture2.png,picture3.gif等”的字符串。此ArrayList中有50或60个字符串。我需要在开头添加文件夹的路径,如“mnt / sdcard0 / Pictures / picture1.jpg等”。所以,我正在使用以下代码
Integer PhotoFileAmount = PhotoArray.length; //PhotoArray and PhotoArrayList are same
for(int i=0; i < PhotoFileAmount; i++){
String PhotoFileAndPath = (PhotoFolder + '/' + PhotoArrayList.get(i));
PhotoArrayList.remove(PhotoArrayList.get(i));
PhotoArrayList.add(PhotoFileAndPath);
}
但是我得到了一个奇怪的结果。 PhotoArrayList的开头没有变化,而它的中间部分是好的,最后一部分得到路径twitce。比如“picture1.jpg,mnt / sdcard0 / Pictures / picture2.png,mnt / sdcard0 / Pictures / mnt / sdcard0 / Pictures / picture3.gif
答案 0 :(得分:2)
如果要更改ArrayList
的元素,请使用set
方法为给定位置的元素指定新值:
int PhotoFileAmount = PhotoArray.length; // use int here to avoid unnecessary boxing / unboxing
for(int i=0; i < PhotoFileAmount; i++){
String PhotoFileAndPath = (PhotoFolder + '/' + PhotoArrayList.get(i));
PhotoArrayList.set(i, PhotoFileAndPath);
}
如果您使用remove
和add
,您不仅可以更改列表中元素的索引;即使你让它工作也是非常低效的,因为每次调用remove
时都必须移动列表中的所有元素。
答案 1 :(得分:1)
ArrayList.add(E Object)
在列表末尾添加Object
您当前正在从列表中的任何位置删除项目,然后在列表的末尾添加新版本。当i
接近PhotoFileAmount
时,您的.get(i)
语句将开始检索您最后添加的修订对象。