精华内容
下载资源
问答
  • list是一个ArrayList对象,哪个选项代码填写到//todo delete处,可以在Iterater遍历过程正确并安全的删除一个list保存对象 ic static void main(String[] args) { List<Integer> list =...

    文章目录


    题目

    list是一个ArrayList的对象,哪个选项的代码填写到//todo delete处,可以在Iterater遍历的过程中正确并安全的删除一个list中保存的对象

    ic static void main(String[] args) {
    		List<Integer> list = new ArrayList<Integer>();
    		Iterator<Integer> it = list.iterator();
    		int index = 0;
    		while (it.hasNext()) {
    			Object obj = it.next();
    			if (needDelete(obj)) {// needDelete返回boolean控制是否删除对象
    				// todo delete
    			}
    			index++;
    		}
    
    • A. list.remove(obj);
    • B. list.remove(index);
    • C. list.remove(it.next());
    • D. it.remove();

    答案:D
    原因:
    在这里插入图片描述

    展开全文
  • 删除集合中的元素常见方法汇总   package com.jerval.test; import java.util.ArrayList; import java.util.Iterator; import java.util.List; /** * Description: * * Features or change log: ...
    展开全文
  • 集合中删除元素

    2019-09-07 13:33:01
    集合中提供remove方法删除元素,同样,迭代器中也提供了一个remove方法删除元素。for循环调用集合remove方法编译器会将for循环优化为迭代器遍历集合,在迭代器中使用集合remove方法会报一个...

    集合中提供remove方法来删除元素,同样的,迭代器中也提供了一个remove方法来删除元素。for循环调用集合的remove方法编译器会将for循环优化为迭代器遍历集合,在迭代器中使用集合的remove方法会报一个ConcurrentModificationException异常。

    展开全文
  • 在foreach中删除元素时,每一次删除都会导致集合的大小和元素索引值发生变化,从而导致在foreach中删除元素时会抛出异常。 集合已修改;可能无法执行枚举操作。 方法一:采用for循环,并且从尾到头遍历 如果...


    在foreach中删除元素时,每一次删除都会导致集合的大小和元素索引值发生变化,从而导致在foreach中删除元素时会抛出异常。

    集合已修改;可能无法执行枚举操作。
    在这里插入图片描述

    方法一:采用for循环,并且从尾到头遍历

    • 如果从头到尾正序遍历删除的话,有些符合删除条件的元素会成为漏网之鱼;
      正序删除举例:
       List<string> tempList = new List<string>() { "a","b","b","c" };
    
       for (int i = 0; i < tempList.Count; i++)
       {
           if (tempList[i] == "b")
           {
               tempList.Remove(tempList[i]);
           }
       }
    
       tempList.ForEach(p => {
           Console.Write(p+",");
       });
    
    

    控制台输出结果:a,b,b,c
    有两个2没有删除掉;
    这是因为当i=1时,满足条件执行删除操作,会移除第一个b,接着第二个b会前移到第一个b的位置,即游标1对应的是第二个b。
    接着遍历i=2,也就跳过第二个b。

    • 用for倒序遍历删除,从尾到头
       List<string> tempList = new List<string>() { "a","b","b","c" };
    
       for (int i = tempList.Count-1; i>=0; i--)
       {
           if (tempList[i] == "b")
           {
               tempList.Remove(tempList[i]);
           }
       }
    
       tempList.ForEach(p => {
           Console.Write(p+",");
       });
    
    

    控制台输出结果:a,c,
    这次删除了所有的b;

    方法二:使用递归

    使用递归,每次删除以后都从新foreach,就不存在这个问题了;

        static void Main(string[] args)
        {
            List<string> tempList = new List<string>() { "a","b","b","c" };
            RemoveTest(tempList);
    
            tempList.ForEach(p => {
                Console.Write(p+",");
            });
    	}
        static void RemoveTest(List<string> list)
        {
            foreach (var item in list)
            {
                if (item == "b")
                {
                    list.Remove(item);
                    RemoveTest(list);
                    return;
                }
            }
        }
    
    

    控制台输出结果:a,c,
    正确,但是每次都要封装函数,通用性不强;

    方法三:通过泛型类实现IEnumerator

        static void Main(string[] args)
        {
            RemoveClass<Group> tempList = new RemoveClass<Group>();
            tempList.Add(new Group() { id = 1,name="Group1" }) ;
            tempList.Add(new Group() { id = 2, name = "Group2" });
            tempList.Add(new Group() { id = 2, name = "Group2" });
            tempList.Add(new Group() { id = 3, name = "Group3" });
    
            foreach (Group item in tempList)
            {
                if (item.id==2)
                {
                    tempList.Remove(item);
                }
            }
    
            foreach (Group item in tempList)
            {
                Console.Write(item.id+",");
            }
    	//控制台输出结果:1,3
    
        public class RemoveClass<T>
        {
            RemoveClassCollection<T> collection = new RemoveClassCollection<T>();
            public IEnumerator GetEnumerator()
            {
                return collection;
            }
            public void Remove(T t)
            {
                collection.Remove(t);
            }
    
            public void Add(T t)
            {
                collection.Add(t);
            }
        }
        public class RemoveClassCollection<T> : IEnumerator
        {
            List<T> list = new List<T>();
            public object current = null;
            Random rd = new Random();
            public object Current
            {
                get { return current; }
            }
            int icout = 0;
            public bool MoveNext()
            {
                if (icout >= list.Count)
                {
                    return false;
                }
                else
                {
                    current = list[icout];
                    icout++;
                    return true;
                }
            }
    
            public void Reset()
            {
                icout = 0;
            }
    
            public void Add(T t)
            {
                list.Add(t);
            }
    
            public void Remove(T t)
            {
                if (list.Contains(t))
                {
                    if (list.IndexOf(t) <= icout)
                    {
                        icout--;
                    }
                    list.Remove(t);
                }
            }
        }
    

    展开全文
  • List集合是我们平时使用最多的集合了,一般用来存放从数据库查询对象数据,但有时我们会从中筛选不需要数据,第一次使用这种方式: 使用增强for循环遍历,使用listremove方法删除不符合对象。 Page...
  • 在使用Iterator迭代器对集合中的元素进行迭代时,如果调用了集合对象remove()方法删除元素之后,继续使用迭代器遍历元素,会出现异常。接下来通过一个案例来演示这种异常。假设在一个集合中存储了学校所有学生...
  • Python中集合使用,去除重复元素、创建集合、列表中去除重复元素、add()在集合中添加元素方法、remove()删除元素方法的使用 1.集合中元素不会重复。例如: >>> num2 = {1,2,3,4,5,5,4,3,2} >>> ...
  • 一、list集合循环删除元素 1.通过普通for删除删除符合条件多个元素 for(int i=0;ilist.size();i++){ if(list.get(i).equals("del")) list.remove(i); } 上面这种方式会抛出java.lang....
  • 我们要删除ArrayList集合中的元素有2种方法:#1,普通for循环 #2,迭代器删除 下面通过代码来演示一下: package com.lianxi2;import java.util.ArrayList; public class Demo1 { public static void main(String...
  • 1.问题描述: 今天遇到一个问题,就是在前端想要...通过查资料,集合存在动态删除元素的方法——splice() 2.具体解决方式: for(var k = 0;k&lt; curThis.List.length;k++){ if(curThis.List[k].Status ==...
  • java遍历集合删除元素的方法

    千次阅读 2019-04-26 14:32:27
    实际结果是:集合中最后一个元素之前,会调用迭代器hasNext()方法,该方法发现当前位置索引等于集合元素数量,判断遍历结束,跳出循环,实则最后一个元素未被遍历到。 2、第一种遍历删除方法,是自己控制并...
  • 参考https://blog.csdn.net/weixin_42230550/article/details/87990486 vue中,如何在方法中动态的删除集合中的元素? me.btn_element.splice(this.id, 1);
  • 下面小编就为大家带来一篇Java集合类ArrayList循环中删除特定元素的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 下面小编就为大家带来一篇java中循环遍历删除List和Set集合中元素的方法(推荐)。小编觉得挺不错的,在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 使用Iterator方式可以顺利删除和遍历 Iterator<String> it = list.iterator(); while(it.hasNext()){ String x = it.next(); if(x.equals("del")){ it.remove(); } } 这种方式可以正常循环及...
  • 删除 list 集合中的元素只有一个时候,有三种方法都可以实现。 import java.util.ArrayList; import java.util.Iterator; import java.util.List; /** * 删除 list 集合中的元素(当删除的元素有多个时候,...
  • 在foreach中删除元素时,每一次删除都会导致集合的大小和元素索引值发生变化,从而导致在foreach中删除元素时会抛出异常。 集合已修改;可能无法执行枚举操作。 方法一:采用for循环,并且从尾到头遍历 如果...
  • 需要删除List和Set的某些元素,当时使用边遍历,边删除的方法,却报了以下异常:ConcurrentModificationException为了以后不会忘记,和也给遇到同样问题的同事提供一个参考: 出现错误的代码如下所示: ...
  • 例如:需求:删除list集合中的元素为a List<String> list=new ArrayList<>(); list.add("a"); list.add("b"); list.add("c"); list.add("d"); for(int i=0;i<list.size;i++){ if(list.get(i).equals...
  • 我们都知道遍历集合可能会用到 for循环 增强for循环 迭代器 map转set等方式,那么在使用什么方法才能完美的删除或者添加集合中的数据呢? 答案是迭代器 原因: 普通for循环中进行集合操作话,会导致...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,323
精华内容 1,329
关键字:

集合中删除元素的方法