当前位置: 首页 > news >正文

深圳市长城建设有限公司网站做爰网站名称

深圳市长城建设有限公司网站,做爰网站名称,Wordpress 打开xml rpc,求职简历模板电子版免费目录 1.0 集合的并发修改问题 1.1 如何解决集合的并发修改问题 2.0 Collcetions 工具类的说明 1.0 集合的并发修改问题 我们可以简单的认为,就是使用迭代器遍历集合时,又同时在删除集合中的数据,程序就会出现并发修改异常的错误。 代码如下&…

目录

        1.0 集合的并发修改问题

                1.1 如何解决集合的并发修改问题

        2.0 Collcetions 工具类的说明


        1.0 集合的并发修改问题

        我们可以简单的认为,就是使用迭代器遍历集合时,又同时在删除集合中的数据,程序就会出现并发修改异常的错误。

代码如下:

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;public class Abnormal {public static void main(String[] args) {//创建对象,再添加数据List<String> list = new ArrayList<>();list.add("张三");list.add("陈七");list.add("李麻子");list.add("李四");list.add("王五");//利用迭代器进行遍历,先创建迭代器Iterator<String> iterator = list.iterator();while (iterator.hasNext()){String a = iterator.next();if (a.contains("李")){list.remove(a);}}System.out.println(list);}
}

运行结果如下:

       

        像以上情况,一边遍历的时候去删除数据,直接会报错,原因是因为集合是一个可变的容器,每删一个数据,容器的大小都会改变,那么数据存放的位置也会相应的改变。迭代器遍历可能不好理解,我们就换成普通的 for 循环,但是两者的出现的 Bug 是一样的。

代码如下:

import java.util.ArrayList;
import java.util.List;public class Text_For {public static void main(String[] args) {//创建对象,再添加数据List<String> list = new ArrayList<>();list.add("张三");list.add("陈七");list.add("李麻子");list.add("李四");list.add("王五");for (int i = 0; i < list.size(); i++) {String a = list.get(i);if (a.contains("李")){list.remove(a);}}System.out.println(list);}
}

运行结果如下:

        发现用 for 循环竟然不报错,原因可能是没有用迭代器遍历严谨吧,以上的两种代码的效果都是一样的,会出现 Bug ,就是本来要删除带 ”李“ 的名字,但是发现名字还有一个”李四“,没有被删除,那是什么原因呢?

        

        直接会把 ”李四“ 忽略掉,这就是这出现 Bug 的地方。

                1.1 如何解决集合的并发修改问题

        对于用普通的 for 循环来遍历的代码来说可以有两种方法;第一个方法就是每一次删除数据的时候,都要进行 i--; 第二方法就是从尾开始遍历。

代码如下:

第一种方法

import java.util.ArrayList;
import java.util.List;public class Text_For {public static void main(String[] args) {//创建对象,再添加数据List<String> list = new ArrayList<>();list.add("张三");list.add("陈七");list.add("李麻子");list.add("李四");list.add("王五");for (int i = 0; i < list.size(); i++) {String a = list.get(i);if (a.contains("李")){list.remove(a);i--;}}System.out.println(list);}
}

运行结果如下:

        成功把”李四“也删除掉了。

第二种方法

import java.util.ArrayList;
import java.util.List;public class Text_For {public static void main(String[] args) {//创建对象,再添加数据List<String> list = new ArrayList<>();list.add("张三");list.add("陈七");list.add("李麻子");list.add("李四");list.add("王五");for (int i = list.size() - 1; i >= 0; i--) {String a = list.get(i);if (a.contains("李")){list.remove(a);}}System.out.println(list);}
}

运行结果如下:

        一样也可以把”李四“删除掉。

        对于用迭代器来遍历的代码来说,只能把集合对象.remove(String str) 换成迭代器对象.remove()

代码如下:

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;public class Abnormal {public static void main(String[] args) {//创建对象,再添加数据List<String> list = new ArrayList<>();list.add("张三");list.add("陈七");list.add("李麻子");list.add("李四");list.add("王五");//利用迭代器进行遍历,先创建迭代器Iterator<String> iterator = list.iterator();while (iterator.hasNext()){String a = iterator.next();if (a.contains("李")){iterator.remove();}}System.out.println(list);}
}

运行结果如下:

        也是可以的。

        对于增强 for 循环还有利用 Lambda 表达式的循环都不可以用来一边遍历集合,一边删除数据,无法解决集合的并发修改异常。

        2.0 Collcetions 工具类的说明

        是一个用来操作集合的工具类。

以代码为例来介绍具体的静态方法:

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;public class Text_Collections {public static void main(String[] args) {String s1 = "李四";String s2 = "张三";String s3 = "王五";String s4 = "张麻子";List<String> list = new ArrayList<>();//1. addAll() 为集合批量添加数据Collections.addAll(list,s1,s2,s3,s4);System.out.println(list);//输出结果为:[李四, 张三, 王五, 张麻子]//2. shuffle() 打乱list集合中的元素顺序Collections.shuffle(list);System.out.println(list);//输出结果为:[王五, 张麻子, 李四, 张三]//3. sort() 对list集合的元素进行升序排序Collections.sort(list);System.out.println(list);//输出结果为:[张三, 张麻子, 李四, 王五]}
}

运行结果如下:

         补充第三种方法,如果对自定的对象进行排序的话,默认的 sort 是会报错的,所以得自定义比较,创建一个比较器。

代码如下:

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;public class Text_Collections {public static void main(String[] args) {Student s1 = new Student("张三",19);Student s2 = new Student("李四",33);Student s3 = new Student("王五",21);List<Student> list = new ArrayList<>();Collections.addAll(list,s1,s2,s3);//自定义,根据年龄进行排序Collections.sort(list, new Comparator<Student>() {@Overridepublic int compare(Student o1, Student o2) {return o1.getAge()- o2.getAge();}});System.out.println(list);}
}

运行结果如下:

 



http://www.yayakq.cn/news/910884/

相关文章:

  • 牛商网网站模板友情链接交换工具
  • 济宁网站建设第一品牌Wordpress媒体库途径
  • 网站备案信息注销原因外贸网站建设规划
  • 餐饮网站制作成都甲壳虫品牌设计公司
  • 网站备案制度wordpress 自动广告
  • 医院做网站是最简单的前端吗怎样在国外网站上做外贸广告
  • 高仿id97网站模板100个经典产品设计
  • 重庆做木门网站公司简介怎样在拼多多上卖自己的产品
  • 一款游戏的制作过程seo网站诊断
  • 东莞电子网站建设深圳临时工最新招聘信息
  • 网站服务器速度对seo有什么影响深圳东门街道办事处电话
  • 手机免费创网站网站流量排名 全球
  • 丹徒建设网官方网站免费建设游戏对战平台网站
  • 建设网站需要租服务器吗竞价推广外包托管
  • 网站索引量突然下降互联网技术是什么
  • 建站推广什么意思怎样做微信网站
  • 佛山新网站制作公司手机能建设网站忙
  • 在电脑上做网站的软件如何黑掉jsp做的网站
  • 浙江省住房建设厅继续教育网站度假村网站模板
  • 合肥网站建设政务区长沙财优化公司
  • 深圳电力建设公司网站济南专业网站制作
  • 网站服务器是指什么网站开发是哪个
  • 长沙模板建站源码三大主流app开发平台
  • 赣州市南康建设局网站深圳营销策划
  • 建立网站的步骤和费用火车头获取不到wordpress列表
  • 网站项目策划书模板建广告网站需要多少钱
  • 怎么做刷业网站医疗器械网
  • 手机测评网站seo免费视频教程
  • 网站制作公司制作网站的流程是怎样的呢网站建设专业品牌
  • 免费的asp网站wordpress08