zoukankan      html  css  js  c++  java
  • Java连载151JUnit简介以及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这个阈值。

    三、源码:

  • 相关阅读:
    Android深度探索读书笔记 第四章
    Android深度探索读书笔记 第三章
    Android深度探索读书笔记 第二章
    Android深度探索第九章
    Android深度探索第十章
    Android深度探索第八章
    第六章
    第七章
    第五章
    第四章
  • 原文地址:https://www.cnblogs.com/ruigege0000/p/15696140.html
Copyright © 2011-2022 走看看