如何在Android(Java)中从通用arraylist中删除项
我这里有一个对象的通用arraylist,我想删除某些元素,问题是当我使用for循环迭代列表时,我不能执行简单的如何在Android(Java)中从通用arraylist中删除项,java,android,Java,Android,我这里有一个对象的通用arraylist,我想删除某些元素,问题是当我使用for循环迭代列表时,我不能执行简单的remove(),因为元素在每次删除后都会移动 谢谢使用删除元素 喜欢 Iterator itr = list.iterator(); String strElement = ""; while (itr.hasNext()) { strElement = (String) itr.next(); if (strElement.equals("2")) {
remove()
,因为元素在每次删除后都会移动
谢谢使用删除元素
喜欢
Iterator itr = list.iterator();
String strElement = "";
while (itr.hasNext()) {
strElement = (String) itr.next();
if (strElement.equals("2")) {
itr.remove();
}
}
阵列列表中删除的对象,可以使用:
mArrayList.remove(object);
或者,您可以使用删除对象:
while(iterator.hasNext()){
if(iterator.next() == some condition for removal){
iterator.remove();
}
}
创建要从原始ArrayList中删除的数据索引的单独ArrayList,然后通过使用for循环在其上循环来删除这些元素
ArrayList<Myobj> arr = new ArrayList<Myobj>();
for (Myobj o : arr){
arr.remove(arr.indexOf(o));
}
ArrayList arr=new ArrayList();
对于(Myobj o:arr){
arr.remove(arr.indexOf(o));
}
您可以在遍历ArrayList时向后迭代并删除。这样做的优点是后续元素不需要移动,并且比向前移动更容易编程
List<String> arr = new ArrayList<String>();
ListIterator<String> li = arr.listIterator(arr.size());
// Iterate in reverse.
while(li.hasPrevious()) {
String str=li.previous();
if(str.equals("A"))
{
li.remove();
}
}
List arr=new ArrayList();
ListIterator li=arr.ListIterator(arr.size());
//反向迭代。
while(li.hasPrevious()){
字符串str=li.previous();
如果(str.equals(“A”))
{
li.remove();
}
}
您可以这样迭代列表
public void clean(List<Kopek> kopeks) {
for(Kopek kopek : kopeks) {
if (kopek.isDirty())
kopeks.remove(kopek);
}
}
public void clean(列出Kopek){
用于(Kopek Kopek:kopeks){
if(kopek.isDirty())
移除(kopek);
}
}
这相当于
public void clean1(List<Kopek> kopeks) {
Iterator<Kopek> kopekIter = kopeks.iterator();
while (kopekIter.hasNext()) {
Kopek kopek = kopekIter.next();
if (kopek.isDirty())
kopeks.remove(kopek);
}
}
public void clean1(列出Kopek){
迭代器kopekIter=kopeks.Iterator();
while(kopekIter.hasNext()){
Kopek=kopekIter.next();
if(kopek.isDirty())
移除(kopek);
}
}
不要这样做。。。(由于您已经观察到的原因。)
public void clean(列出Kopek){
不使用迭代器的for(int i=0;i也解决了这个问题。我所要做的就是获取要删除的索引并按降序排序,然后将其从列表中删除。
检查下面的代码
Arraylist<obj> addlist = getlist();
List<Integer> indices = new ArrayList<Integer>();
for(int i=0; i<addlist.size() ;i++){
if(addlist.get(i).getDelete()){
indices.add(i);
}
}
Collections.sort(indices, Collections.reverseOrder());
for (int i : indices)
addlist.remove(i);
Arraylist addlist=getlist();
列表索引=新的ArrayList();
对于(int i=0;i您是否有要删除的特定值?是的,在对象中我有一个布尔值,我必须检查并删除该项更改您的链接以指向Android迭代器。在它指向以前的Java版本之前。如果需要,请随意还原。如果我必须删除列表将出现问题。删除第二个项目时将出现错误shift@Rakshi:如果您知道要删除哪些元素,可以不使用for循环。如果我的列表中有5个项目,我必须删除第2个和第5个项目,如果我先删除第2个项目,则列表中只有4个项目,如果我删除了,则会出现异常要使用迭代器删除5th,您可以始终处理按顺序排列的元素,而不是指定的索引。因此,您不应该为上述问题而烦恼。问题是,当我删除列表中的任何项时,将发生移位,并生成异常。问题是,当我删除列表中的任何项时,将出现异常shift并生成一个例外。实际上,您希望从ArrayList中删除的数据中获取数据,或者在删除数据后获取新形成的ArrayList的索引。我需要从列表中删除随机对象。例如,如果列表中有5个项目,我想删除第2个和第4个对象。您可以找到解决方案下面的n。感谢Intrest感谢您的努力..但是解决方案列表。删除(对象);甚至dosent帮助它创建相同的异常..最好使用迭代器或检查解决方案,而不使用下面的迭代器
public void clean(List<Kopek> kopeks) {
int i=0;
while(i<kopeks.size()) {
Kopek kopek = kopeks.get(i);
if (kopek.isDirty()) // no need to increment.
kopeks.remove(i);
else
i++;
}
}
Arraylist<obj> addlist = getlist();
List<Integer> indices = new ArrayList<Integer>();
for(int i=0; i<addlist.size() ;i++){
if(addlist.get(i).getDelete()){
indices.add(i);
}
}
Collections.sort(indices, Collections.reverseOrder());
for (int i : indices)
addlist.remove(i);