JavaSE--集合总览04:集合的并发修改问题,Collections类的操作以及可变参数

一.集合的并发修改问题

关于集合的并发修改问题---就是把集合内包含某个值的元素都删了

以下是一个实例:要求删除含"李"的元素

分析:大家都知道可以遍历集合的方式-----迭代(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("---------------------");}

实例:

结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值