list的remove方法

list有两个remove方法;

E remove(int index);//根据索引删除

boolean remove(Object o);//根据对象删除

List<String> list = new ArrayList<String>();
String a = "1";
String b = "2";
String c = "2";
String d = "1";
String e = "1";
String f = "1";

list.add(a);
list.add(b);
list.add(c);
list.add(d);
list.add(e);
list.add(f);
List<String> ss = new ArrayList<String>();
for (int j = 0; j < list.size(); j++) {
  if (list.get(j).equals("2")) {
    // list.remove(j);
    list.remove(list.get(j));
  }
  //System.out.println("list大小 " + list.size() + ",此时j的值: " + j + ",此时集合的值:" + list.toString());
}
System.out.println(list.toString());

两个方法都会输出

[1, 2, 1, 1, 1]

这里面有个坑就是两个remove方法在删除了某个元素以后,集合里剩下的元素都会往前移动,所以在第一次删除b元素时,j等于1,在删除b元素后,b元素之后的元素全都向前移动,这时候集合的元素为1 2 1 1 1 ,但是j已经等于1了,所以下一次循环j等于2时已经把c元素给跳过了。

所以想要得到正确结果 [1, 1, 1, 1]

解决办法:

1.将循环结构改成从最后一个元素开始遍历

for (int j = list.size() - 1; j >= 0; j--) {
  if (list.get(j).equals("2")) {
    // list.remove(j);
    list.remove(list.get(j));
  }
}

2.使用迭代器

Iterator<String> it = list.iterator();
while (it.hasNext()) {
  String x = it.next();
  if (x.equals("2")) {
    it.remove();
  }
}
System.out.println(list.toString());

原文地址:https://www.cnblogs.com/zhengbiyu/p/9240093.html

时间: 2024-10-10 03:20:53

list的remove方法的相关文章

C# Datatable删除行的Delete和Remove方法

delete和remove Delete的使用是 datatable.Rows[i].Delete(); Remove的使用是datatable.Rows.Remove(datatable.Rows[i]); 这两个的区别是,使用delete后,只是该行被标记为deleted,但是还存在,用Rows.Count来获取行数时,还是删除之前的行数.需要使用datatable.AcceptChanges()方法来提交修改. 而Remove方法则是直接删除. 如果在for循环里删除行的话,最好是使用de

Iterator的remove方法可保证从源集合中安全地删除对象(转)

import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class IteratorTest{ public static void main(String[] args) { List<String> list = new ArrayList<String>(); list.add("Test1"); list.add("Test2&qu

EntityFramework Core 1.1 Add、Attach、Update、Remove方法如何高效使用详解

EntityFramework Core 1.1方法理论详解 当我们利用EF Core查询数据库时如果我们不显式关闭变更追踪的话,此时实体是被追踪的,关于变更追踪我们下节再叙.就像我们之前在EF 6.x中讨论的那样,不建议手动关闭变更追踪,对于有些特殊情况下,关闭变更追踪可能会导致许多问题的发生. 实体状态 对于EF Core 1.1中依然有四种状态,有的人说不是有五种状态么,UnChanged.Added.Modified.Deleted.Detached.如果我们按照变更追踪来划分的话,实际

Python List remove()方法-用于移除列表中某个值的第一个匹配项

描述 remove() 函数用于移除列表中某个值的第一个匹配项. 语法 remove()方法语法: list.remove(obj) 参数 obj -- 列表中要移除的对象. 返回值 该方法没有返回值但是会移除两种中的某个值的第一个匹配项. 实例 以下实例展示了 remove()函数的使用方法: #!/usr/bin/python aList = [123, 'xyz', 'zara', 'abc', 'xyz']; aList.remove('xyz'); print "List : &quo

探讨迭代器中为什么不能通过集合的方式删元素而是使用迭代器中的remove()方法经行删除

由该链接引发的思考:http://bbs.itheima.com/forum.php?mod=viewthread&tid=26270&mobile=1 看到这篇文章后,一副似懂非懂的样子,果断将楼主的代码拷贝到eclipse中运行了下,果断发现了些问题. 经过测试,发现总是在当集合中倒数第二个满足条件时程序才可以正常运行,否则,就会抛出ConcurrentModificationException异常 然后,我在while{it.hasNext()){和String str = (Str

Datatable删除行的Delete和Remove方法介绍

在实际项目开发中,如果要删除DataTable中的某一行,大约有以下几种办法: 使用DataTable.Rows.Remove(DataRow),或者DataTable.Rows.RemoveAt(index):可以直接删除行 datatable.Rows.Delete().Delete()之后需要datatable.AccepteChanges()方法确认完全删除,因为Delete()只是将相应列的状态标志为删除,还可以通过datatable.RejectChanges()回滚,使该行取消删除

collection中的remove方法

import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; public class CollectionTest03 { /** boolean remove(Object o); remove和contains方法都需要集合中的元素重写equals方法. 因为Object中的equals方法比较内存地址,在现实的业务逻辑当中 不能比较内存地址,该比较内容. */ public stat

为什么Java里的Arrays.asList不能用add和remove方法?

在平时的开发过程中,我们知道可以将一个Array的对象转化为List.这样的操作,我们只要采用Arrays.asList这个方法就行了.笔者前段时间一直用这个方法,有一天,我发现通过Arrays.asList得到的List无法进行add和remove等操作. 下面是一段很简单的测试代码: public class MainFacade { public static void main(String[] args) { List<Integer> list = Arrays.asList(1,

List&lt;T&gt;的IndexOf方法和Remove方法

Microsoft地址 List<T>的IndexOf()方法 如果T是值类型的,就按照比较值的方法从列表的第一个元素开始逐个匹配,如果T是引用类型,就比较引用是否相同 举例如下: class A {      public int x;      public A(int x)      {           this.x = x;      } } List<A> listA = new List<A>(); listA.Add( new A(3) ); list

jQuery的remove()方法

remove()方法的定义和用法: 此方法将会从DOM中删除所有匹配的元素. 说明:remove()方法不会把匹配的元素从jQuery对象中删除,因而可以在将来再使用这些匹配的元素,不过除了这个元素本身得以保留之外,其他的比如绑定的事件,附加的数据等都会被移除. 语法结构: $(selector).remove(expr) 参数列表: 参数 描述 expr 可选.用于筛选元素的jQuery表达式 实例代码: <!DOCTYPE html> <html> <head> &