快速失败早期失败是一种软件工程概念,旨在通过在不应该发生的事情发生时立即停止执行来防止复杂问题的发生。 在之前的博客文章和演示中,我将详细介绍这种方法的优点,在此博客文章中,我将详细介绍Java 8中该思想的另一种用法。

在Java中,由Collection类(例如ArrayList,HashSet,Vector等)返回的迭代器快速失败。 这意味着,如果您在迭代时尝试从基础数据结构中添加()或remove(),则会收到ConcurrentModificationException。 让我们来看看:

import static java.util.Arrays.asList;
List ints = new ArrayList<>(asList(1,2,3,4,5,6,9,15,67,23,22,3,1,4,2));for (Integer i: ints) {// some codeints.add(57);  // throws java.util.ConcurrentModificationException
}

在Java 8u20中,Collections.sort()API也会快速失败。 这意味着您也不能在迭代内调用它。 例如:

import static java.util.Arrays.asList;
List ints = new ArrayList<>(asList(1,2,3,4,5,6,9,15,67,23,22,3,1,4,2));for (Integer i: ints) {// some codeCollections.sort(ints); // throws java.util.ConcurrentModificationException
}

这很有道理。 遍历数据结构并在迭代过程中对其进行排序不仅是反直观的,而且还可能导致不可预测的结果。 现在,您可以解决此问题,如果您在排序调用后立即中断,就不会获得异常。

import static java.util.Arrays.asList;
List ints = new ArrayList<>(asList(1,2,3,4,5,6,9,15,67,23,22,3,1,4,2));for (Integer i: ints) {// some codeCollections.sort(ints); // throws java.util.ConcurrentModificationExceptionbreak;
}

但是,这几乎不是很棒的代码。 尝试避免使用旧的skool迭代,并尽可能使用Lambda。 但是,如果遇到问题,只需在迭代之外进行排序

import static java.util.Arrays.asList;
List ints = new ArrayList<>(asList(1,2,3,4,5,6,9,15,67,23,22,3,1,4,2));
Collections.sort(ints);for (Integer i: ints) {// some code
}

或使用添加时排序的数据结构。

Java 8版本20中引入了Collections.sort()API的这一新行为。 值得看一下详细介绍API更改的特定部分:

区域 :core-libs / java.util.collections
简介 :Collection.sort推迟到List.sort

以前, Collection.sort复制列表中的元素以将其排序到一个数组中,对该数组进行排序,然后使用数组中的这些元素和默认方法在适当的位置更新列表。
List.sort推迟到Collection.sort。 这是非最佳的安排。

从8u20版本开始, Collection.sort推迟到List.sort 。 这意味着,例如,使用ArrayList实例调用Collection.sort现有代码现在将使用ArrayList实现的最佳排序。

我认为,如果Oracle在此方面更明确地说明这种更改如何引起运行时问题,那将有所帮助。 考虑到每个人都使用Collections框架,如果以前没有抛出异常的API现在可以在相同的情况下使用(错误代码及其全部内容),那么发行说明使开发人员更容易找到信息会更好。

翻译自: https://www.javacodegeeks.com/2017/11/fail-early-java-8.html

早期更多失败– Java 8相关推荐

  1. java分页中显示更多_早期更多失败– Java 8

    java分页中显示更多 快速失败或早期失败是一种软件工程概念,旨在通过在不应该发生的事情发生时立即停止执行来防止复杂问题的发生. 在之前的博客文章和演示中,我将详细介绍这种方法的优点,在此博客文章中, ...

  2. 博客 学院 下载 更多 zxy18210943475 java 和 、|| 和 | 的区别和作用

    博客 学院 下载 更多 zxy18210943475 java && 和 &.|| 和 | 的区别和作用 原创  2016年12月15日 23:58:22 标签: java 6 ...

  3. 美团面试失败(Java开发)

    作者:pigercc https://www.cnblogs.com/pigercc/p/6441524.html 1,背景 年前不想在小公司干了,裸辞后,回家干了些私事,然后回上海找工作,看到美团在 ...

  4. 快速失败Vs安全失败(Java迭代器附示例)

    译者:java达人-卍极客 英文出处:Java Concept Of The Day 英文链接:http://javaconceptoftheday.com/(点击文末阅读原文前往) 转载请标注以上声 ...

  5. java登陆密码验证失败,java用户名密码验证示例代码分享

    类:NameII    权限:public 方法:main    权限:public 参数:name,password,denglu,i; 参数介绍: name,数据类型 String ,用来存储一个 ...

  6. 【早期笔记】java 开发环境搭建

    java 开发环境搭建 文章目录 java 开发环境搭建 `windows`下搭建 Java修饰符 Java 变量 源文件声明规则 Employee.java 文件代码: synchronized 修 ...

  7. 新中新 金龙一卡通 TPE_StartTPE 加载授权文件失败 JAVA

    用JAVA的JNA调用TPE.dll文件的TPE_StartTPE接口的时候一直提示加载授权文件失败,问他们技术,他们说放项目根目录,一直想着根目录了,调试了好几天都不行.其实不然,说错了,还是另外一 ...

  8. 手机安装失败java. io_Android java.io.FileNotFoundException:*** (Permission denied)

    自从离开上海来到杭州之后,陆续接触了Android,Python,C++,OpenCV,最为一个新人来说,一路上遇到了很多坑,幸运的是 这互联网的强大(大傻子我还是蛮喜欢的哈),一路填填补补总算走了下 ...

  9. 安装失败java.lang_linux安装jdk出现java/lang/NoClassDefFoundError: java/lang/Object错误的解决方案...

    近日在redhat上安装jdk出现了一个莫名的错误 Error occurred during initialization of VM java/lang/NoClassDefFoundError: ...

最新文章

  1. 心得丨走过最长的路,就是机器学习过程中的弯路
  2. 周记 2014.11.29
  3. 银行不能成为外国资本的“***”
  4. Android开发:Android Studio中gradle的代理问题
  5. SQL SERVER怎么去掉重复数据?
  6. java中的数据结构总结
  7. 【MFC】MFC中调用系统软键盘的几种方法
  8. 记一次 .NET游戏站程序的 CPU 爆高分析
  9. 第十节:委托和事件(2)(泛型委托、Func和Action、事件及与委托的比较)
  10. 牛人和普通人的区别在于思维方式!
  11. C++新特性探究(四):Raw String Literals
  12. 【实战-Linux】--搭建CA认证中心实现https取证
  13. 14.TCP/IP 详解卷1 --- DNS:域名系统
  14. 循环机换变速箱油教程_变速箱油多久换?很多老司机都可能不知道
  15. 牛腩新闻发布系统-发布
  16. 21天通关python 磁力_Python 实现 BT 种子转化为磁力链接 [实战]
  17. matlab multisim,清华大学出版社-图书详情-《仿真软件教程——Multisim和MATLAB》
  18. ApowerREC v1.5.6.2 最佳屏幕录像机
  19. 如何按关键字搜索商品详情
  20. 医学计算机思维培养方式的研究,计算机教学中的科研思维培养

热门文章

  1. Nacos(十一)之NacosSync 介绍
  2. 汇编语言(十九)之删除数组中的元素
  3. JavaFX官方教程(十四)之转换,动画和视觉效果教程的源代码
  4. Spring 知识点详解
  5. 你不知道ADo.Net中操作数据库的步骤【超详细整理】
  6. Servlet使用适配器模式进行增删改查案例(EmpServiceImpl.java)
  7. 配置struts.xml时extends=struts-default会报错,原因和解决
  8. 2-6 基于SpringBoot的SpringSecurity环境快速搭建与验证
  9. 利用java求积分(定积分和无穷限积分)
  10. graal java_使用SparkJava和Graal的本机微服务