-
Java连载151-JUnit简介以及HashMap初步分析
一、配置JUnit环境
-
JUnit是一个集成测试单元框架,我们先下载软件包,来配置环境
package com.bjpowernode.java_learning;
public class D149_TestJunit {
String message = "hello world";
MessageUtil messageUtil = new MessageUtil(message);
@Test
public void testPrintMessage() {
assertEquals(message, messageUtil.printMessage());
}
}
class TestRunner {
public static void main(String[] args) {
Result result = JUnitCore.runClasses(TestJUnit.class);
for (Failure failure: result.getFailures()) {
System.out.println(failure.toString());
}
System.out.println(result.wasSuccessful());
}
}
序号 | 方法 | 描述 |
---|---|---|
1 | void assertEquals(boolean expected, boolean actual) | 检查两个变量或者等式是否平衡 |
2 | void assertFalse(boolean condition) | 检查条件是假的 |
3 | void assertNotNull(Object object) | 检查对象不是空的 |
4 | void assertNull(Object object) | 检查对象是空的 |
5 | void assertTrue(boolean condition) | 检查条件为真 |
6 | void fail() | 在没有报告的情况下使测试不通过 |
二、HashMap详解
1.发展历程
-
在JDK7的时候,HashMap是采用“数组+链表”的数据结构进行存储,使用链表是为了能够解决hash值重复的时候,存储节点的方案。 -
在JDK8之后,HashMap是采用“数组+链表+红黑树”的数据结构,使用红黑树进行查找的时候能够提高效率,它的搜索时间复杂度是O(log(n)),而链表的搜索时间复杂度是O(n),在默写状况下链表会转化成红黑树
2.链表转换成红黑的条件
-
链表的长度超过8且HashMap中的节点超过64个 -
如果链表长度超过8,但是节点还没有超过64,会先对数组进行扩容
3.关键代码
// 链表长度大于8的时候转换代码为
if (binCount >= TREEIFY_THRESHOLD - 1)
treeifyBin(tab, hash);
-
table长度为64的时候体现在 treeifyBin 方法中的这段代码
int n, index; Node<K,V> e;
if (tab == null || (n = tab.length) < MIN_TREEIFY_CAPACITY)
resize();
4.为什么转换红黑树的阈值是8
-
根据源码的解释,是根据概率统计中的泊松分布进行制定的规则,在数量达到8的时候,概率已经小到0.00000006,数量更多的时候,概率就更小了,因此选取了8这个阈值。
三、源码:
-
github路径:https://github.com/ruigege66/Java/blob/master/newJava/src/com/newJava/D151_HashMapAnalysis.java -
CSDN:https://blog.csdn.net/weixin_44630050
出 处:https://www.cnblogs.com/ruigege0000/p/15696140.html
最新更新
带有参数的装饰器
类装饰器
django中的auth模块与admin后台管理
python的日期处理
字符串常用方法
基本数据类型概述
python-map()函数基本用法
python带你实现任意下载AcFun视频数据~
bbs项目之注册功能
变量的定义和使用
三大常用数据库事务详解之三:事务运行
三大常用关系型数据库事务详解之二:基
三大关系型数据库事务详解之一:基本概
MongoDB常用命令(2)
MongoDB基本介绍与安装(1)
SQLServer触发器调用JavaWeb接口
SQL Server索引的原理深入解析
SqlServer2016模糊匹配的三种方式及效率问题
SQL中Truncate的用法
sqlserver 多表关联时在where语句中慎用tri
VB.NET中如何快速访问注册表
ASP.NET中图象处理过程详解
Vue(1)Vue安装与使用
JavaScript 语言入门
js将一段字符串的首字母转成大写
纯原生html编写的h5视频播放器
H5仿原生app短信验证码vue2.0组件附源码地
TypeScript(4)接口
TypeScript(3)基础类型
TypeScript(2)WebStorm自动编译TypeScript配置