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

为什么ConcurrentHashMap不允许插入null值?

在 Java 语言中,ConcurrentHashMap 和 Hashtable 这些线程安全的集合是不允许 key 或 value 插入 null 值的,而 HashMap 又允许 key 或 value...插入 null 值,这到底是为什么呢?...探索最终原因 通过上面源码分析,我们似乎已经找到了 ConcurrentHashMap 不允许插入 null 值的原因,用一句话概括就是:乌龟的屁股“规定”!...然而,这个原因是不能说服面试官的,虽然源码是这样设计的,但我们要思考的是,这样设计背后更深层次的原因,为什么 ConcurrentHashMap 不允许插入 null?...可以看出这就是 ConcurrentHashMap 的二义性问题,那为什么 HashMap 就不怕二义性问题呢? 可证伪的 HashMap 上面说到 HashMap 是不怕二义性问题的,为什么呢?

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

为什么foreach中不允许对元素进行add和remove

阿粉的读者遇到了一个比较经典的面试题,也就是标题上说的,为什么 foreach 中不允许对元素进行 add 和 remove。...阿粉就这个问题深入分析一下为什么不让使用 add 和 remove,并且实际运行一下,我们来看一下。...其实说这话的,一般都是没去看过源码的,为什么这么说,如果你要是反编译出来 foreach 这一段代码,那么你肯定发现内部是使用迭代器实现的,既然这样,那好,我们再用迭代器遍历一下试试。...为什么不相等的时候,就会出现异常呢?...1, 2, 3, 4, 6, 7, 8, 9] 他实现了对这个元素中间进行移除的操作,那么他的内部源码是怎么实现的,实际上很简单,复制 也就是他创建一个新的数组,再将旧的数组复制到新的数组上,但是为什么很少有人推荐这种做法

44510

上下文无关文法产生的语言都可以用正则文法来描述_c语言结构体默认值

正则表达式的表达能力等价于正则文法,正则表达式的定义如下: 字母表中的任意字母是正则表达式,空串和空集也是正则表达式; 如果r, s是正则表达式,那么r|s, rs, r*, (r)也是正则表达式。...正则表达式的扩展: r+:一个或多个重复 . :任意字符 [a-z]:字符范围 [^abc]:不在给定集合中的任意字符 r?...:可选 正则表达式只能使用终结符(字母表中的字符),因而很容易变得复杂又难懂,实际中,经常使用正则描述,正则描述允许使用非终结符定义表达式,很像EBNF,但是它限制在未完全定义之前,不能使用非终结符,也就是说不允许递归或自嵌套...像正则表达式的表达能力等价于正则文法一样,BNF范式的表达能力等价于上下文无关文法。BNF是“Backus Naur Form”的缩写。...在程序设计语言中,通常用正则表达式描述词法规则。但是正则表示式的表达能力有限,她无法表达括号配对等语法形式,因而,需要引入表达能力更强的上下文无关文法。

99820

URL是如何关联Nginx location配置块的?

比如,如下12个location将会构造出1颗4层的静态树,其中子树中的所有location,都是比父结节更长的前缀location;在同一层的结点中,它们互不相属,但却是基于字母表有序的(注意,同级location...它的匹配顺序如下图蓝色箭头所示: 事实上,/his/2001/test.jpg请求的匹配共包含6步: 请求首先命中/,暂时/将被设置为最长前缀,再进入子树看看有没有更长的前缀; 未匹配上直接子结点res,由于h在字母表的顺序小于...因此到左兄弟结点his中继续匹配; 匹配上his后,此时/his被设置为最长前缀; 匹配上直接子树/his/20,将其设为最长前缀,仍然进入子树尝试更长的前缀匹配; 未匹配上直接子树20,由于1在字母表的顺序中小于...2,因此到左兄弟结点中去看看; /20未匹配命中,且在字母表中/先于1,匹配到此结束。...Nginx启动时会将所有前缀location构造出一颗静态的多叉树,其中子树中的结点都是父结点的更长前缀,而兄弟结点间则按字母表排序。这样,前缀URL的匹配效率就很高。

27920

形式语言笔记 - wuuconixs blog

字母表 字母表是一个非空有穷集合,字母表中的元素称为该字母表的一个字母 letter。...字母表的乘积 Product 如果是字母表∑1\sum_1∑1​和字母表∑2\sum_2∑2​的乘积,则表示{ab ∣ a∈∑1, b∈∑2}\{ab\ |\ a\in \sum_1,\ b\in \sum...实际上就是字母表1中取个字符,字母表2中取1个字符,然后去连接。...我们之前接触幂实际上是从字母表的幂开始,然后从字母表的幂定义字母表的克林闭包。然后从克林闭包中选择一些元素作为语言。 实际上幂的概念是定义在集合上的。字母表是一个字符的集合,语言是一些句子的集合。...相等的定义 如果两个正则表达式产生的原因是相同的,则称两个正则表达式相等或者等价。

59420

golang刷leetcode 字符串(3)单词搜索

同一个单元格内的字母不允许被重复使用。...解题思路: 1,从字母表的任意一个位置开始,跟字符串的首字母比较,如果相等则继续;否则比较下一个位置 2,如果比较完所有位置,有一个能成功,就成功。 3,对于匹配算法,是典型的深度优先搜索。...A,字母表和单词如果相等,则递归比较下一个位置,用一个同等大小的table记录是否访问过路径,如果访问失败,函数返回前恢复记录 B,字母表的移动方向有上下左右四种,单词的移动方向有从左往右 C,匹配失败有以下...3种情况 (1),超出字母表边界 (2),当前位置不匹配 (3) ,当前位置已经被访问了 func exist(board [][]byte, word string) bool { if

29410

编译器架构 ( Compiler Architecture )

字符串长度是字母表出现的总数,例如,字符串tutorialspoint的长度为14,用| tutorialspoint |=14表示。...没有字母表的字符串,即长度为零的字符串称为空字符串,用ε(epsilon)表示。 特殊符号Special Symbols 典型的高级语言包含以下内容符号:- ?...语言 language 一种语言被认为是一组有限的字符串覆盖在一组有限的字母表上。计算机语言被认为是有限集,可以对其进行数学上的集合运算。有限语言可以用正则表达式来描述。...正则表达式能够通过定义符号的有限字符串的模式来表示有限语言。由正则表达式定义的语法称为正则语法。由正则语法定义的语言称为正则语言。 正则表达式是指定模式的重要符号。...正则表达式遵循许多代数定律,这些定律可用于将正则表达式处理为等价形式。

1.6K20

【正则】批量提取邮件地址

这种提取方法论,叫'正则表达式',Regular Expression.借助一些可以使用正则表达式的工具,我们来尝试批量提取电子邮件地址....在线测试工具 打开百度,搜索'正则表达式测试工具',就可以看到很多在线正则表达式测试工具了.随便取一个吧,例如第3个搜索项的这个:https://c.runoob.com/front-end/854...< 这一串字母表示查找反括号和正括号之间的任意字符.点(.)表示任意单个字符,星号(*)表示任意多个,包括零个字符,问号(?)...表示限制.具体就不多解释啦 在替换为那里,填写分号,或者你想替换的其他符号 当然这样首尾是替换不干净的,需要你再处理一下 notepad++ 这是一款代码编写工具,也可以使用正则表达式 正则表达式测试工具...如果你也对正则表达式感兴趣,推荐你看'精通正则表达式',然后你就会一种万能的字符匹配方法论了~

1.3K20

还不会正则表达式?看这篇!

正则表达式是很多程序员,甚至是一些有了多年经验的开发者薄弱的一项技能。...大家都很多时候都会觉得正则表达式难记、难学、难用,但不可否认的是正则表达式是一项很重要的技能,所有我将学习和使用正则表达式时的关键点整理如下,供大家参考。...不同语言中的正则表达式写法有少许差异,本文将使用Javascript中的语法。 什么是正则表达式?...开始 在Javascript中,一个正则表达式以 / 开头和结尾,所以简单至 /hello regexp/ 就是一个正则表达式。...常见的元字符有: \d:匹配任意数字,等价于 [0-9] \D:匹配任意非数字字符;\d 的补集 \w:匹配任意基本拉丁字母表中的字母和数字,以及下划线;等价于 [A-Za-z0-9_] \W:匹配任意非基本拉丁字母表中的字母和数字

76320

还不会正则表达式?看这篇!

大家都很多时候都会觉得正则表达式难记、难学、难用,但不可否认的是正则表达式是一项很重要的技能,所有我将学习和使用正则表达式时的关键点整理如下,供大家参考。...不同语言中的正则表达式写法有少许差异,本文将使用Javascript中的语法。 什么是正则表达式?...个人比较偏好Regex101,regex101支持在正则表达式的不同flavor之间切换、解释你的正则表达式、显示匹配信息、提供常用语法参考等功能,非常强大。...常见的元字符有: \d:匹配任意数字,等价于 [0-9] \D:匹配任意非数字字符;\d 的补集 \w:匹配任意基本拉丁字母表中的字母和数字,以及下划线;等价于 [A-Za-z0-9_] \...W:匹配任意非基本拉丁字母表中的字母和数字,以及下划线;\w 的补集 \s:匹配一个空白符,包括空格、制表符、换页符、换行符和其他Unicode空格 \S:匹配一个非空白符;\s的补集 \b:匹配一个零宽单词边界

88940
领券