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

网站打开速度概念网址注册

网站打开速度概念,网址注册,深圳广科网站建设,哪里有建设网站中的视频下载一、前言 在 Java 开发中#xff0c;Arrays.asList() 是一个常用的工具方法#xff0c;它允许开发者快速将数组转换为列表。尽管这个方法非常方便#xff0c;但许多开发者在使用时可能会遭遇一个常见的错误#xff1a;尝试向由 Arrays.asList() 返回的列表中添加元素时抛出…一、前言 在 Java 开发中Arrays.asList() 是一个常用的工具方法它允许开发者快速将数组转换为列表。尽管这个方法非常方便但许多开发者在使用时可能会遭遇一个常见的错误尝试向由 Arrays.asList() 返回的列表中添加元素时抛出异常。本文将详细探讨这个现象的根本原因并提供相关的使用示例和解决方案。。 二、事故回顾 这个问题是出现开发一个电商平台的订单系统时遇到了类似的问题。需要将一个订单ID数组转换为一个List并在后续的业务逻辑中向这个List中添加新的订单ID。 由于小伙伴经验不足使用了Arrays.asList()方法部署到线上导致在添加新订单ID时抛出了UnsupportedOperationException异常整个订单处理流程中断线上系统出现了严重的故障。 影响分析 这次事故对电商平台造成了巨大的影响 用户体验下降 由于订单处理流程中断用户无法正常下单导致用户体验大幅下降。业务中断 订单系统的故障直接影响到了整个电商平台的业务运营造成了大量的订单积压。经济损失 由于业务中断平台失去了大量的潜在收入给公司带来了不小的经济损失。信任危机 频繁的系统故障让用户对平台的信任度下降可能导致用户流失。 后面也是及时修复吸取本次事故教训。 三、事故问题描述 1、首先先简单描述一下这个事故问题废话不多说直接看实际业务代码也就将一个数组转换为List并对这个List进行增删操作。 Integer[] arr {1, 2};ListInteger list Arrays.asList(arr);list.add(3); 上述代码看起来没问题编译器也没有报错。但是运行这段代码时会抛出UnsupportedOperationException异常提示我们不支持添加操作。这究竟是怎么回事呢 所以这是不是个大坑如果在实际开发中没有进行自测必定不会酿成重大线上事故。 四、问题分析 上述已经知道这个使用Arrays.asList()将数组装换成List会在add情况会报错接下来深入源码进行分析。 Arrays.asList()的内部实现 Arrays.asList(arr)方法实际上返回的是一个Arrays类的内部类ArrayList而不是我们常用的java.util.ArrayList。这个内部类ArrayList继承自AbstractList并没有实现add和remove方法。 Arrays类的内部类ArrayList完整源码如下 private static class ArrayListE extends AbstractListEimplements RandomAccess, java.io.Serializable {private static final long serialVersionUID -2764017481108945198L;private final E[] a;ArrayList(E[] array) {a Objects.requireNonNull(array);}Overridepublic int size() {return a.length;}Overridepublic Object[] toArray() {return a.clone();}OverrideSuppressWarnings(unchecked)public T T[] toArray(T[] a) {int size size();if (a.length size)return Arrays.copyOf(this.a, size,(Class? extends T[]) a.getClass());System.arraycopy(this.a, 0, a, 0, size);if (a.length size)a[size] null;return a;}Overridepublic E get(int index) {return a[index];}Overridepublic E set(int index, E element) {E oldValue a[index];a[index] element;return oldValue;}Overridepublic int indexOf(Object o) {E[] a this.a;if (o null) {for (int i 0; i a.length; i)if (a[i] null)return i;} else {for (int i 0; i a.length; i)if (o.equals(a[i]))return i;}return -1;}Overridepublic boolean contains(Object o) {return indexOf(o) ! -1;}Overridepublic SpliteratorE spliterator() {return Spliterators.spliterator(a, Spliterator.ORDERED);}Overridepublic void forEach(Consumer? super E action) {Objects.requireNonNull(action);for (E e : a) {action.accept(e);}}Overridepublic void replaceAll(UnaryOperatorE operator) {Objects.requireNonNull(operator);E[] a this.a;for (int i 0; i a.length; i) {a[i] operator.apply(a[i]);}}Overridepublic void sort(Comparator? super E c) {Arrays.sort(a, c);} } 可以看到并没有实现add和remove方法这两个方法在父类中默认抛出UnsupportedOperationException异常。 具体原因 下面是内部源码的分析 1.内部类ArrayList的限制 Arrays.asList(arr)返回的内部类ArrayList是一个固定长度的列表它没有实现add和remove方法。 当我们调用list.add(3)时实际上调用的是AbstractList中的add方法而这个方法直接抛出了UnsupportedOperationException异常。 2.源码分析 AbstractList的add方法如下 五、解决方案 面对这一限制开发者可以采取以下几种方式来处理 Arrays.asList() 返回的列表 1、使用 new ArrayList() 创建可变列表 如果需要一个可变大小的列表可以使用 new ArrayList(Arrays.asList(fruits)) 进行转换   这种方式创建了一个新的 ArrayList 实例它的大小是可变的因此可以自由添加、删除元素。 ListString dynamicList new ArrayList(Arrays.asList(Apple, Banana, Cherry));dynamicList.add(Date);  // 现在可以成功添加元素System.out.println(dynamicList); 2、直接初始化 ArrayList 另一种选择是直接使用 ArrayList 的构造函数并传入数组元素   这种方法提供了更大的灵活性适合需要动态修改的场景。 ListString dynamicList new ArrayList();Collections.addAll(dynamicList, Apple, Banana, Cherry);dynamicList.add(Date);  // 添加成功 3、使用流Streams 在 Java 8 及更高版本中可以利用流的 API 来创建可变列表   这种方法简洁而现代化适合喜欢函数式编程风格的开发者。 ListString dynamicList Stream.of(Apple, Banana, Cherry).collect(Collectors.toList());dynamicList.add(Date);  // 添加成功 转载小哈学Java
http://www.hkea.cn/news/14555257/

相关文章:

  • wordpress建站难不难wordpress 全站ajax
  • 免费做销售网站有哪些营销广告文案
  • 网页界面设计宽度和安全区wordpress做seo
  • 建设一个私人视频网站wordpress自定义上传头像
  • 网站建设客户资料收集清单招考网站开发
  • 网站首页轮播图片素材内网访问wordpress很慢
  • 厚街做网站的公司wordpress支持gif
  • 贵阳做个网站需要多少钱营销管理
  • 网站建设制作设计营销 中山网站建设维护 天博网络
  • 网站运营推广难做创业投资平台
  • 新手做导航网站万网域名网站建设
  • 网站改版设计思路wordpress 跳板
  • 网站推广排名最新报价做课件可赚钱的网站
  • 高新区区建设局网站中装建设集团网站
  • 还有哪些网站可以做H5python 网站框架
  • 网站开发如何使用微信登录员工信息管理系统源码
  • 长春市网站建设菡萏怡景装饰公司
  • 看书网站排名怎样做返利网站
  • 岳阳建设公司网站建设网站站点过程中
  • 网站内链少改怎么做wordpress演示
  • 二手车做网站的目的大赛网站开发需求
  • 上海网站建设 方案莱州网监局
  • 猎奇网站模板深圳建设工程价格信息网站
  • 浙江建设厅官方网站dz网站模板 首页显示内容
  • 做网站准备的资料网站制作费用及后期运营
  • 黄村网站建设公司上海永灿网站建设
  • 写作网站可保存互联网建设企业网站
  • 北关网站制作广西新农村建设工作专题网站
  • 水果零售电子商务网站综合评价与建设研究定西市建设厅官方网站
  • 建网站 云主机潍坊专利申请