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

娄底建设网站的公司手机网站大全下载

娄底建设网站的公司,手机网站大全下载,_沈阳做网站,邢台学校网站建设报价看到这么标题可能觉得这个真是太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.eeditor.cn/news/122538/

相关文章:

  • 郑州百度网站推广电商平台运营费用预算
  • 鸭梨网站建设杭州西湖区抖音seo方案
  • 沈阳手机网站建设提供做网站公司
  • 久其软件公司网站外链交换平台
  • 网站建设书生商友宁波关键词排名优化
  • 网站反向链接学校网站建设 应用情况
  • 国外创意摄影网站vps服务器的iis网站
  • 网站抓取诊断ip出错苏州seo网站公司
  • 服务器放多个网站自己做一个app
  • 网站建设静态部分实训总结沈阳三好街附近做网站
  • 上饶建设局网站购物网站建设款流程
  • 七台河网站网站建设wordpress的模板目录在哪里
  • 个人网站欣赏的网站简要说明网站制作的基本步骤
  • 做网站 建站saas建站平台
  • 小型网站建设价格低里水网站开发
  • 舟山网站开发免费设计企业logo
  • 手机网站做安卓客户端网站建设推广公司哪家权威
  • 东莞网站建设 烤活鱼桂林做手机网站设计
  • wordpress迁站到阿里云人才网网站开发手册
  • 雅安公司做网站wordpress 优势
  • dede 网站改宽屏代码seo 优化一般包括哪些内容
  • 网站建设一定要买数据盘吗设计做的网站哪些好
  • ps做网站首页规范尺寸腾讯云一键wordpress
  • 鞍山做网站比较好的公司酒泉网站建设公司
  • 广州网站建设智能 乐云践新织梦手机网站
  • 网站建设实训总结及体会微信网站建设教程
  • 网站开发微信支付详细教程昆山建设工程安监站网站
  • 西宁网站制作费用是多少动感网站模板
  • 描述网站开发的广告词西安哪里有做网站的
  • 六盘水网站设计做摄影的网站知乎