一.集合的并发修改问题
关于集合的并发修改问题---就是把集合内包含某个值的元素都删了
以下是一个实例:要求删除含"李"的元素
分析:大家都知道可以遍历集合的方式-----迭代(Iterator),增强型for循环,普通for循环,Lambda简化。前面01有关于遍历的详细介绍喔快速入口:http://t.csdnimg.cn/xRtje
要删除上面含“李”的字大家有很多种方法,但是大多数都会出错以下是大致方法的错误点以及修改方法:
迭代器:
、
直接这样写会报错:
这是因为迭代器在遍历集合时会维护一个修改计数器,当通过迭代器以外的方式(如直接使用集合的 remove 方法)修改集合时,这个计数器就会与迭代器内部记录的不一致,从而导致异常。 所以解决方法就是使用迭代器提供的删除数据的方法: 迭代器对象.remove();删除迭代器当前遍历到的数据:每删除一个数据后 相当也在底层做了i--
修改为:
增强型for循环------注意:增强型也是不能直接做的,原因:增强型本质上也是迭代器解决方法是 将遍历到的满足条件的元素添加到新的集合在删除----比较麻烦
正确方式:
普通for循环:
注意:使用for循环删除数组或者集合某个元素,一定要注意删除元素后索引会前移所以一定要删除后i--或者i++(倒着删除)
Lambda表达式:原因和前面一样。当在遍历集合的过程中直接删除集合中的元素时,会导致集合的结构发生变化,而遍历操作正在进行,这就破坏了遍历的预期状态,从而引发 ConcurrentModificationException 异常。
解决方法:
二.Collections类的操作
Collections是集合工具类相当于Arrays数组类的操作
Collections工具类提供的常见都操作集合的方法有:addAll(集合名,元素1,元素2....)--添加元素到集合,shuffle(集合名)---打乱集合内元素的顺序,sort(集合名)---对集合排序默认升序
注意:集合内是对象是则要自己指定比较规则---详细可见03Set集合的介绍最下面快速进入:http://t.csdnimg.cn/x0aTB
实例:
这是对学生类的修改:
运行结果:
三.可变参数
可变参数:是一种特殊的形参,定义在方法构造器的形参列表里,格式是:数据类型...参数名称
关于它的注意事项:
1:一个形参列表中,只能有一个可变参数,因为前面的可变参数会把后面的也拿去
public static void test(int...number,int...number2){}
2:可变参数必须放在形参列表的下最后面
public static void test2(int age,int...number){}
3:可变参数在方法内部,本质就是一个数组
public static void test(int...number){ System.out.println(number.length); System.out.println(Arrays.toString(number)); System.out.println("---------------------");}
实例:
结果:
标签:...,遍历,迭代,删除,元素,集合,总览,04 From: https://blog.csdn.net/weixin_62189092/article/details/142280232