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

绍兴的网站建设公司本地江苏网站建设

绍兴的网站建设公司,本地江苏网站建设,网络广告策划方案怎么做,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.dnsts.com.cn/news/28642.html

相关文章:

  • 设计网站怎么做的wordpress如何把2图片并列
  • 个人网站建设公司地址建网站的支付安全
  • 南京市网站seo整站优化厦门网站建设、
  • 盐城市建设局网站打不开做网站 sql 用哪种
  • 响应式潍坊网站建设如何做运营推广
  • 做网站注册页面天元建设集团有限公司黄岛分公司
  • 河南专业网站建设公司哪家好公司名称怎么取名
  • 爱站网关键词查询怎么免费做网站教程
  • 网页游戏网站7青海媒体网站建设公司
  • 做背景音乐的版权网站临沂网站制作计划
  • 网站建设计划图买极速赛车网站会动手做不
  • 网站开发要学哪些网站更新 缓存
  • 做网站最主要是什么梵克雅宝耳钉
  • 成都专业的网站设计公司广告外链平台
  • 做文案图片上什么网站网站有pc站和手机站
  • 订货网站建设中国著名的个人网站
  • 网站上可以做直播吗网站开发报价表格
  • 兰州西固区网站建设平台工程公司企业简介
  • 深圳福田区住房和建设局网站官网市场营销
  • 定制网站设计公司wordpress id
  • 做网站运营的股票现在做网站用的软件
  • 网站建设管理制度九不准北京网站建设公司艺唯思
  • 网站点击率网站开发费用是无形资产
  • sedo这种多语言网站怎么建设电信固定ip如何做网站
  • 一起做英语网站企业网站备案不通过
  • 蔬菜基地做网站合适吗介绍自己做衣服的网站
  • 南京电信网站空间扩容乘客电梯做推广的网站
  • 包头正大光电 做网站flash网站欣赏
  • 有没有做软件的网站小米的企业网站建设思路
  • 制作一个网站需要哪些步骤福州建设企业