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

刷q币网站建设wordpress文章没有评论

刷q币网站建设,wordpress文章没有评论,深圳网站建设 排行榜,代做道具网站看到这么标题可能觉得这个真是太easy了#xff0c;不就remove吗#xff0c;分分钟搞定。 但结果却出乎意料#xff0c;下面我们来j简单说说list删除数据可能遇到的坑#xff1a; 先说明我们可能会遇到的两个问题#xff1a; 1.java.lang.IndexOutOfBoundsException(索引越…看到这么标题可能觉得这个真是太easy了不就remove吗分分钟搞定。 但结果却出乎意料下面我们来j简单说说list删除数据可能遇到的坑 先说明我们可能会遇到的两个问题 1.java.lang.IndexOutOfBoundsException(索引越界) 2.java.util.ConcurrentModificationException(并发修改异常) 开始测试 首先初始化一个ListMapString,String package test02;import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import java.util.stream.Collectors;/** ListMapString,String 删除元素常见的误区* */public class Test09 {public static void main(String[] args) {ListMapString, String list new ArrayListMapString, String();MapString, String map1new HashMap(); MapString, String map2new HashMap();MapString, String map3new HashMap();MapString, String map4new HashMap();map1.put(key,张三);map1.put(value,20);map2.put(key,李四);map2.put(value,25);map3.put(key,王五);map3.put(value,30);map4.put(key,张三);map4.put(value,35);list.add(map1);list.add(map2);list.add(map3);list.add(map4); for (int i 0; i list.size(); i) {System.out.println(初始化遍历:list.get(i));} } } 需求删除这个list里面key为张三的数据 方式一for i 循环 通过索引使用list.remove(i)删除; for (int i 0; i list.size(); i) {System.out.println(i:i);System.out.println(len:list.size());String a String.valueOf(list.get(i).get(key));if(a.equals(张三)) {list.remove(i);System.out.println(第i次循环删除成功);System.out.println(删除后长度:list.size());}System.out.println(方式一遍历:list.get(i));}出现异常报错java.lang.IndexOutOfBoundsException(索引越界) 原因每次循环删除元素之后初始长度已发生变化在最后一次循环出现越界 打印输出分析 i:0 len:4 第0次循环删除成功 删除后长度:3 方式一遍历:{value25, key李四} i:1 len:3 方式一遍历:{value30, key王五} i:2 len:3 第2次循环删除成功 删除后长度:2 Exception in thread “main” java.lang.IndexOutOfBoundsException: Index 2 out of bounds for length 2 at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64) at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:70) at java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:266) at java.base/java.util.Objects.checkIndex(Objects.java:359) at java.base/java.util.ArrayList.get(ArrayList.java:427) at test01/test02.Test09.main(Test09.java:62) 方式二foreach循环list.remove(map)删除 for(MapString, String map :list) {String a String.valueOf(map.get(key));if(a.equals(张三)) {list.remove(map);}System.out.println(方式二遍历:map);}出现异常报错java.util.ConcurrentModificationException(并发修改异常) 通过源码分析发现在 next、remove方法中都会调用checkForComodification 方法 该方法的 作用是判断 modCount ! expectedModCount是否相等 如果不相等则抛出ConcurrentModificationException异常 当我们调用 list.remove(item)时对 list 对象的 modCount 值进行了修改 而 list 对象的迭代器的 expectedModCount 值未进行修改 所以就抛出ConcurrentModificationException异常 private class Itr implements Iterator { int cursor; // 要返回的下一个元素的索引 int lastRet -1; // 返回的最后一个元素的索引如果没有就返回-1 int expectedModCount modCount; public boolean hasNext() {return cursor ! size;}SuppressWarnings(unchecked)public E next() {checkForComodification();int i cursor;if (i size)throw new NoSuchElementException();Object[] elementData ArrayList.this.elementData;if (i elementData.length)throw new ConcurrentModificationException();cursor i 1;return (E) elementData[lastRet i];}public void remove() {if (lastRet 0)throw new IllegalStateException();checkForComodification();try {ArrayList.this.remove(lastRet);cursor lastRet;lastRet -1;expectedModCount modCount;} catch (IndexOutOfBoundsException ex) {throw new ConcurrentModificationException();}}final void checkForComodification() {if (modCount ! expectedModCount)throw new ConcurrentModificationException();} } 方式三Stream流filter(推荐) list list.stream().filter(e - (!e.get(key).equals(张三))).collect(Collectors.toList());for (int i 0; i list.size(); i) {System.out.println(方式三遍历:list.get(i));}输出 方式三遍历:{value25, key李四} 方式三遍历:{value30, key王五} 方式四迭代器iterator的remove方法使用更加灵活 IteratorMapString, String iterator list.iterator();while (iterator.hasNext()){MapString, String next iterator.next();String key String.valueOf(next.get((key)));if(key.equals(张三)){iterator.remove();}}for (MapString, String map : list) {System.out.println(方式四遍历:map);}输出 方式四遍历:{value25, key李四} 方式四遍历:{value30, key王五} 简单总结 1、用for循环遍历List删除元素时需要注意索引变化左移或右移的问题不推荐。 2、List删除元素时默认按索引删除而不是对象删除不推荐。 3、List删除元素时为避免陷阱建议使用Stream流的filter方式推荐。 3、List删除元素时为避免陷阱建议使用迭代器iterator的remove方式推荐。
http://www.w-s-a.com/news/852797/

相关文章:

  • 网站设计登录界面怎么做网站突然排名没了
  • wordpress 人物页面seo优化公司信
  • 高端网站建设报价网站建设需要硬件设备
  • 做国际物流在哪些网站找客户营销qq怎么申请
  • 网站做推广百度好还是360好科技厅
  • 网站开发工具排名万户网络建一个网站虽要多少钱
  • 用凡科做的网站要钱吗WordPress城市切换
  • 制作一个门户网站需要多少钱营销型网站特征
  • 手机网站 多html中国建设银行网站包头分行
  • 哪个网站做免费广告好招牌图片效果图设计制作
  • 网站建设优化服务机构苏州市做网站
  • 网站如何优化流程企业网站管理系统视频教程
  • 我想克隆个网站 怎么做贵州住房和城乡建设厅官网
  • 网站建设项目前景上海今天新闻综合频道
  • 做网站推销的如何谈客户wordpress怎么做商城
  • 摄影素材库网站服装页面设计的网站
  • 如何用国外网站做头条做个游戏app的费用大概多少
  • 网站 形象入口页福州网站建设网络公司排名
  • 免费下载教学设计的网站送网站建设管理信息内容审核制度
  • 外贸专业网站的公司百度旗下13个app
  • 物理组简介 网站建设高师院校语言类课程体系改革与建设 教学成果奖申报网站
  • 爱网站无法登录怎么回事手表网
  • 网站建设公司现在还挣钱吗山西手动网站建设推荐平台
  • 重庆建设工程交易信息网站网站制作公司起名
  • 东莞寮步做网站的有吗企业宣传册制作
  • 做网站的软件是哪个上蔡做网站
  • 前后端分离实现网站开发紧急通知网页升级
  • 河北专业网站建设公司推荐佛山小程序开发平台
  • 网站开发强制开启浏览器极速模式建设网站有什么风险
  • 360全景网站建设常州专业网站建设公司咨询