候选人无双:JAVA7中在HashMap出现哈希碰撞的时候,会把碰撞的元素用链表相连。JAVA8中在链表长度到达8时会把链表转成红黑树提升查询效率。
面试官:这话我都听了几百遍了。问你一个问题,为啥JAVA8要选择用8这个数字作为临界值,将链表转红黑树。
当时无双同学的内心是这样的。
要说清楚这个问题,要从到高中和大学中学习的统计学相关知识开始说起。
大学时,我一直觉得统计学很有意思,差点就考了满分。 工作以后才发现,JAVA中的很多设计理念都跟统计学有关系滴。比起高等数学,统计概念其实容易理解多了。
日常生活中,大量事件是有固定频率的。
其实我们生活中也会聊到各种分布。比如下面不同季节男人的目光分布.。
各位老铁,来一波美女,看看你的目光停在哪个分布的地方。
美女也看了,现在该专注学习了吧。现在,我们已经知道了两件事情:
1)数据类型(也叫随机变量)有2种:离散数据类型(例如抛硬币的结果),连续数据类型(例如时间) 2)分布:数据在统计图中的形状
现在我们来看看什么是概率。概率分布就是将上面两个东东(数据类型+分布)组合起来的一种表现手段:
概率分布就是在统计图中表示概率,横轴是数据的值,纵轴是横轴上对应数据值的概率。
很显然的,根据数据类型的不同,概率分布分为两种:离散概率分布,连续概率分布。
那么,问题就来了。为什么你要关心数据类型呢?
因为数据类型会影响求概率的方法。
对于离散概率分布,我们关心的是取得一个特定数值的概率。例如抛硬币正面向上的概率为:p(x=正面)=1/2
而对于连续概率分布来说,我们无法给出每一个数值的概率,因为我们不可能列举每一个精确数值。
例如,你在咖啡馆约妹子出来,你提前到了。为了给妹子留下好印象,你估计妹子会在5分钟之内出现,有可能是在4分钟10秒以后出现,或者在4分钟10.5秒以后出现,你不可能数清楚所有的可能时间,你更关心的是在妹子出现前的1-5分钟内(范围),你把发型重新整理下(虽然你因为加班头发 已经秃顶了,但是发型不能乱),给妹子留个好印象。所以,对于像时间这样的连续型数据,你更关心的是一个特定范围的概率是多少。
什么是泊松分布?
试想一下,你现在就站在一个人流密集的马路旁,打算收集闯红灯的人群情况(?)。首先,利用秒表和计数器,一分钟过去了,有5个人闯红灯;第二分钟有4个人;而下一分钟有4个人。持续记录下去,你就可以得到一个模型,这便是“泊松分布”的原型。
除此以外,现实生活中还有很多情况是服从泊松分布的:
10分钟内从ATM中取钱的人数一天中发生车祸的次数每100万人中患癌症的人数单位面积土地内昆虫的数目……
Poisson模型(泊松回归模型)是用于描述单位时间、单位面积或者单位容积内某事件发现的频数分布情况,通常用于描述稀有事件(即小概率)事件发生数的分布。
上述例子中都明显的一个特点:低概率性,以及单位时间(或面积、体积)内的数量。通常情况下,满足以下三个条件时,可认为数据满足Poisson分布:
(1) 平稳性:发生频数的大小,只与单位大小有关系(比如1万为单位,或者100万为单位时患癌症人数不同);
(2) 独立性:发生频数的大小,各个数之间没有影响关系,即频数数值彼此独立没有关联关系;比如前1小时闯红灯的人多了,第2小时闯红灯人数并不会受影响;
(3) 普通性:发生频数足够小,即低概率性。
如果数据符合这类特征时,而又想研究X对于Y的影响(Y呈现出Poisson分布);此时则需要使用Poisson回归,而不是使用常规的线性回归等。
判断是否符合Poisson分布的方法
检验数据是否符合Poisson分布,共有两种方法:一种是通过特征判断;另外一种是通过Poisson检验。
特征判断即是要数据符合上面提到的三个条件;而如果用Poisson检验可在SPSSAU【医学研究→Poisson检验】里进行检验。
在现实研究中,可能更多会通过特征进行判断是否基本符合Poisson分布。
一句话总结:泊松分布是单位时间内独立事件发生次数的概率分布,指数分布是独立事件的时间间隔的概率分布。
请注意是"独立事件",泊松分布和指数分布的前提是,事件之间不能有关联,否则就不能运用上面的公式。
这些统计学模型又跟JAVA8中的HashMap有什么样的关联呢?不要急。下一篇文章将揭示JAVA8HashMap中“隐秘的角落”~~~