首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

ListsubList方法抛出异常java.util.ConcurrentModificationException原理分析

再取出后3000个元素到list2,然后清空list2,最后再打印list1,此时将抛出异常: 2、前戏知识: subList()方法原理分析: 上面的测试方式为什么会出现这个情况,看上去明明没有任何问题...,但是打印list1的时候就抛出异常,肯定不可能是System.out.println()有bug吧,再来仔细看看代码,似乎只有打印语句前面几句话会出现问题,那么就是subList()的调用以及clear...()方法取值,再来看elementData()这个方法: 返回的是elementData这个数组的元素: 由此可见:SubList对象操作的集合与原始list操作的集合是同一个集合,通过offset...ArrayList.this.modCount 与 this.modCount(即SubList的modCount)是否相同,如果不相同则抛出异常java.util.ConcurrentModificationException...= this.modCount判断肯定时true,所以这就是异常抛出的原因。 4、附上一位研究了subList()方法上面的注释得出的结论的图供大家参考学习:

66640
您找到你想要的搜索结果了吗?
是的
没有找到

for-each或迭代调用List的remove方法抛出ConcurrentModificationException的原因

(这个迭代修改的次数)和modCount(这个集合实际修改的次数)不相等,就会抛出ConcurrentModificationException 迭代里面没有add方法,用迭代时,可以删除原来集合的元素...一定要用迭代的remove方法而不是集合自身的remove方法,否则抛异常。 再来看一个例子,这个是否正确?...(lastRet<0)的时候就抛出了这个IllegalStateException异常。...综上 1.在for-each循环和迭代只可以做删除remove操作,不能做添加add操作。...想要删除集合的元素必须用迭代的remove方法,不能添加操作add,因为add也会修改集合的modCount导致ConcurrentModificationException 2.用迭代的remove

23420

探究Presto SQL引擎(1)-巧用Antlr

Vistor需要自行控制访问的子节点,如果遗漏了某个子节点,那么整个子节点都访问不到了。 Listener模式的方法没有返回值,Vistor模式可以设定任意返回值。...Listener模式的访问栈清晰明确,Vistor模式是方法调用栈,如果实现出错有可能导致StackOverFlow。 通过这个简单的例子,我们驱动Antlr4实现了一个简单的计算。...更重要的是,ANTLR4相比自行实现提供了更具想象空间的抽象逻辑,上升到了方法论的高度,因为它已经不局限于解决某个问题,而是解决一类问题。...为此,定义一个小目标:实现一个SQL解析。用该解析实现select field from table语法,从本地的csv数据源查询指定的字段。...五、总结 本文基于四则运算和使用SQL查询csv数据两个案例阐述了ANTLR4在项目开发的应用思路和过程,相关的代码可以在github上看到。

2K10

探究Presto SQL引擎(1)-巧用Antlr

Vistor需要自行控制访问的子节点,如果遗漏了某个子节点,那么整个子节点都访问不到了。 Listener模式的方法没有返回值,Vistor模式可以设定任意返回值。...Listener模式的访问栈清晰明确,Vistor模式是方法调用栈,如果实现出错有可能导致StackOverFlow。 通过这个简单的例子,我们驱动Antlr4实现了一个简单的计算。...通过ANTLR4,我们生成了ParseTree,并基于Visitor模式和Listener模式访问了这个ParseTree,实现了四则运算。...更重要的是,ANTLR4相比自行实现提供了更具想象空间的抽象逻辑,上升到了方法论的高度,因为它已经不局限于解决某个问题,而是解决一类问题。...为此,定义一个小目标:实现一个SQL解析。用该解析实现select field from table语法,从本地的csv数据源查询指定的字段。

1.6K30

如何实现一个SQL解析

在使用SQL解析时,解析SQL的步骤与我们解析Java/Python程序的步骤是非常的相似的,比如:在C/C++,我们可以使用LEX和YACC来做词法分析和语法分析在Java,我们可以使用JavaCC...语法解析我们可以这么来进行理解,在启动语法解析任务时,语法分析的任务会在词法分析的结果上将词条序列组合成不同语法短句,组成的语法短句将与相应的语法规则进行适配,若适配成功则生成对应的抽象语法树,否则报会抛出语法错误异常...使用ANTLR来实现一条SQL,执行或者实现的过程大致是这样的,实现词法文件(.g4),生成词法分析和语法分析,生成抽象语法树(也就是我常说的AST),然后再遍历抽象语法树,生成语义树,访问统计信息...;词法分析规则以大写字母开始;用'string'单引号引出字符串;不需要指定开始符号;规则以分号结束;...4.1.3 ANTLR4实现简单计算功能下面通过简单示例,说明ANTLR4的用法,需要实现的功能效果如下...上面介绍的Calcite集成方法,都是把Calcite的模块当做库来使用。如果觉得太重量级,可以选择更简单的适配器功能。

2.3K30

Antlr4 语法解析(下)

一般来说,面向程序静态分析时,都是使用访问者模式的,很少使用监听模式(无法主动控制遍历AST的顺序,不方便在不同节点遍历之间传递数据) Antlr4词法解析和语法解析 如前面的语法定义,分为Lexer...访问者模式简单说就是会去遍历生成的语法树(针对语法树每个节点生成一个visit方法),以及返回相应的值。我们接下来看看一条简单的select语句生成的树是什么样子: ?...我们继承SqlBaseBaseVisitor,里面提供了默认的访问各个节点的触发方法。...我们可以通过继承这个类,重写对应节点的visit方法,实现自己的访问逻辑,Spark SQL这个继承的类就是org.apache.spark.sql.catalyst.parser.AstBuilder...也是比较重要的一个方法访问对应节点时触发),正是在这个方法中生成主要的Logical Plan的。

3.3K20

打破国外垄断,开发中国人自己的编程语言(1):编写解析表达式的计算

这几种工具都是依赖于文法生成词法分析和语法分析的,例如,在antlr4,如果要识别加减乘除四则运算,只需要编写下面的文法即可。...文法如下: r : 'hello' ID; 在Antlr4,每一个文法都要用分号(;)结尾,如果是固定的字符串,关键字,用单引号括起来。'hello'。 ID表示任意的标识符,也是终结符。...在Antlr4,终结符标识用由首字母大写的字符串表示,ID。而非终结符(可以继续往下推导)用首字母小写的字符串表示,r。 现在是自顶向下分析的第1步,第2步是处理ID。...如何用程序进行词法和语法分析 尽管已经了解了Antlr4的基本使用方法,但到现在为止,还没有用Java编写过一行代码呢?现在我就来演示如何用Java调用上一节生成的词法分析和语法分析。...在Calc.g4,除了第一个文法(prog:stat+;)外,其他的文法都起了别名,printExpr,assign等。所以这些文法对应的回调方法都是以别名作为后缀的,然后前面加上visit。

2.3K40

Antlr4实战:统一SQL路由多引擎

一条数据库SQL执行或实现过程大致是这样的,实现词法文件.g4(antlr写词法文件的话),生成词法分析和语法分析,生成抽象语法树,再遍历抽象语法树,生成语义树,访问统计信息,优化生成逻辑执行计划...访问:没有使用遍历来遍历访问语法分析树,而是访问访问语法分析树。...两者唯一区别:有时,语法分析引入的tokens在词法分析没有发现,通常这是一个bug 实现访问模式 继承HiveSqlBaseBaseVisitor返回类型为String类型...4)实现访问遍历原HSQL生成转换目标语法Presto逻辑,作为翻译的返回结果。 这些实现过程因为函数的转换,不同语句转换,调换,裁剪,增加等等逻辑都是在访问模式遍历语法树的过程实现的。...语法树片段,如图: 在使用Visitor访问模式,对语法树进行遍历时,把HQL语法转换为目标引擎的语法Presto语法。

8.8K41

日常运维|语法分析解析工具之ANTLR4(一)

遗留代码转换、维基文本渲染、JSON解析、DNA模式匹配、数据读取、语言解释、翻译1.2、简单描述生成语法分析自动建立语法分析树自动生成树遍历左递归ANTLR4去除了内嵌,取而代之是监听访问二...='java -jar [antlr-path] ',然后可以使用命令antlr4方式四:将上述命令写入/usr/local/bin目录下4)小测试步骤编写.g4文件antlr4 执行.g4文件自动生成...语法分析树监听语法分析树访问3.1 入门例子编写一个ArrayInit.g4文件// 定义文件,程序语言的名称必须同文件名称一致,都为ArrayInitgrammar ArrayInit;// 规则...ArrayInitParser(tokens); ParseTree tree = parser.init(); System.out.println(tree.toStringTree(parser));}在程序执行...,输入参数后,Mac使用command + D输出,Windows使用Alter + Z输出,UNIX使用Ctrl + D输出4 总结学习逆水行舟,不进则退。

57220

.NET周报【10月第1期 2022-10-11】

在 Windows 虚拟机托管了一个 WCF 的 SOAP 服务和一个.NET 框架 4.6。 文章介绍了转移到新的.NET 平台的原因。 原因主要有以下五点: 跨平台,使用容器。...卓越的工具, CLI 工具、SDK 风格的项目和消除绑定重定向等 迁移过程,库的顺序是".NET Framwork 4.6→....改进了 支持.NET MAUI,支持在 IIS 启动,动态程序分析(数据库访问),等等。...dev.to/dotnet/blazor-wasm-custom-404-page-on-gh-pages-1o99 当 Blazor WebAssembly 托管在 GitHub Pages 上时,如何在访问不存在的页面时显示一个自定义错误页面的文章...图书馆、资料库、工具等 GitHub - xoofx/Antlr4Ast: Antlr4Ast 是一个.NET 库,为 ANTLR4/g4 文件提供一个解析和抽象语法树(AST)。

4.9K20

Spark SQL源码研读系列01:ParseTree

第二阶段:语法分析,从输入的词法符号识别语句结构,antlr生成的语法分析会构建语法分析树(parse tree),它记录了语法分析器识别出输入语句结构的过程,以及该结构的各组成部分。?...遍历模式Antlr4有两种遍历模式:Listener模式由Antlr提供的walker对象自动调用,而Visitor模式则必须通过显式的访问调用遍历其子级,如果忘记在节点的子节点上调用visit方法,意味着子树不会被访问...Antlr内建的树遍历会去触发在Listener像enterStat和exitStat的一串回调方法。?...小结通过parser返回一个context的树,ParserTree tree = parser.stat();visitor.visit(tree),在visit调用context的accept方法...,StatContext.accept;在context调用visitor的具体实现方法visitAddSub;在实现visitor方法时候,注意如果还有childContent,继续往下。

1.1K20

其他服务访问windows7的虚拟机vmubuntu系统的方法

因为最近在windows7的vm12安装了ubuntu作为服务,想让局域网内其他服务可以访问到,捣鼓了一阵,做个总结 Vmware网络连接方式分三种,桥接方式,NAT方式,仅主机模式方式.桥接模式对应...虚拟网络,将虚拟机看成和主机在同一个网段的另一台物理主机.本次研究结果是使用桥接方式 1 关掉windwos防火墙 控制面板-windows防火墙-打开或关闭防火墙 然后将防火墙关掉 2 修改虚拟网络编辑...VM-编辑-虚拟网络编辑 1)选择vmnet0 2)vmnet信息选择“桥接模式” 3)“桥接到”选择和windows一样的网卡驱动 (查看本机网卡驱动方法: 1右键无线网连接小图标。...4)找到自己连接的无线网,右键-属性-双击ICP/IPv4 5)选择使用下面的ip地址 (这里需要填写动态获取时一样的ip,查看方法:win+r 输入cmd,控制台输入ipconfig/all, 找到自己连接的网络信息...) ipv4地址,子网掩码,默认网关,dns服务填写 5 设置虚拟机系统网络 编辑网络,IPv4settings method:manual adress:和主机ip在一个网段,最后一个数字不一样就行

2.3K10

MySQL Shell 8.0.32 for GreatSQL编译二进制包

部分包需要访问国外网站才能下载,有些环境下就没那么方便了,因此我都下载到本地并打包好了。...在编译antlr4时还要再下载googletest依赖包,这个下载地址也是要访问国外网站的,在内网环境中会失败,因此我antlr4源码包微调了下,把googletest依赖包也打进去了,也可以通过微调代码略过该步骤...greatsql/greatsql_shell_build bash # 查看容器日志,大概要等几分钟才能编译完成,取决于服务性能 # 如果看到类似下面的结果,就表明二进制包已编译完成 $ docker...说完用Docker容器构建二进制包的方法,再说下手动编译全过程,有兴趣的同学也可以跟着自己动手做一遍,增加体感。 2....代码包相应位置,再修改antlr4代码,略过下载步骤,详见下面的做法: $ cd /opt/antlr4-4.10/runtime/Cpp/ # 新建目录,并将下载的googletest压缩包放在该目录下

14810

元数据解读

元数据只是发挥数据价值的充分条件,“酒香也怕巷子深”制定了合理并严格执行数据标准,通用的易用的模型设计数仓底座,极高的良性循环的数据质量,安全的顺滑的数据访问和数据共享机制和合理的高效的管理流程等,就亟须统一标准的...元数据应用领域较广,种类甚多, 按照不同应用领域或功能,元数据分类有很多种方法或种类,元数据一般大致可为三类:业务元数据、技术元数据和操作元数据。...元数据生命周期 笔者这里以集中式元数据架构为例讲解,通过对数据源系统的元数据信息采集,发送Kafka消息系统进行解耦合,再使用Antlr4开发各版SQL解析,对元数据信息新增、修改和删除操作进行标准化集中整合存储...其不灵活也不便于元数据统一集管理。...统一SQL路由引擎是使用Antlr4实现的词法文件,具体实现可参考Antlr4实战:统一SQL路由多引擎。

1.2K51

antlr4入门篇

身份标识 令牌名称始终以大写字母开头,而Java Character.isUpperCase方法定义的词法分析规则也是如此。...所有文字串的一个或多个字符的长度被包围在单引号’;’,’if’,’>=’,和’\’(是指含有单引号字符的一个字符的字符串)。文字绝不包含正则表达式。...对于Java目标,运行时库假定文件位于UTF-8。使用的工厂方法CharStreams,您可以指定其他编码。 代码编写 用花括号括起来的任意文本。...嵌入式代码可以出现在:@header以及@members命名的动作,解析和词法分析规则,异常捕获规范,解析规则的属性部分(返回值,参数和局部变量)以及某些规则元素选项(当前谓词)。...前者将代码注入到识别类定义之前的生成的识别类文件,后者将代码作为字段和方法注入到识别类定义。 对于组合语法,ANTLR将动作同时注入解析和词法分析

4.1K10

大数据平台安全建设实践

从数据开发人员的角度,只能访问自己业务域的数据,在数据开发的过程,可以减少干扰项,提高效率。 互联网科技发展蓬勃兴起,人工智能时代来临,抓住下一个风口。...数据管理人员需要直接在 ranger 配置初始权限。这些都是很不方便的点。另外,ranger 支持的查询引擎有限,想要增加查询引擎( presto)就需要定制化开发。...数据平台向某个执行引擎提交查询之前,会先访问智能执行引擎选择服务。在选定合适的执行引擎之后,通过敏感字段重写模块改写 SQL 查询,将其中的敏感字段根据隐藏策略(只显示后四位)进行替换。...由于 hive 目前使用的是 antlr3 的版本,我们将 hive 的语法文件使用 antlr4 的语法重写了一遍。之所以要全部用 antlr4,是为了最大程度的重用 visitor 的逻辑。...基于同样的方法,我们实现了字段血缘的追溯,从而可以进行字段的敏感等级传递。

2.2K50
领券