首页 > 编程语言 >10-Hashtable底层结构和源码分析

10-Hashtable底层结构和源码分析

时间:2024-07-13 09:12:28浏览次数:15  
标签:10 HashMap 源码 Hashtable null 底层

10-Hashtable底层结构和源码分析

介绍汇总:

  1. Hashtable的基本介绍
  2. Hashtable底层机制说明
  3. Hashtable 和 HashMap 对比

1-Hashtable的基本介绍

  1. 存放的元素是键值对:即 K-V
  2. Hashtable 的键和值都不能为 null ,不然后抛出 NullPointerException 异常
  3. Hashtable 使用方法基本上和 HashMap 一样
  4. Hashtable 是线程安全的,HashMap 是线程不安全的

2-Hashtable底层机制说明

  1. Hashtable 中维护的是数组+链表,来进行数据存储
  2. Hashtable 初始化

注:从初始流程图中,可以发现在初始化时就创建好内部维护的数组、扩容警戒值、装载因子。默认初始的初始容量为 11 ,以及默认的装载因子为 0.75。

  1. 添加元素

注:其中每次扩容都会以原本容量的 2 倍 + 1 为新容量,newCapacity = (oldCapacity << 1) + 1;,还有就是索引的取法为 (hash & 0x7FFFFFFF) % tab.length;,反正就是按位与、完了取余,长度为当前对应数组的长度或容量。

  1. 扩容实践练习
// 扩容一
package map.hashtable;

import java.util.Hashtable;

public class HashtableSource {

    @SuppressWarnings({"all"})
    public static void main(String[] args) {

        Hashtable hashtable = new Hashtable();

        for (int i = 1 ; i <= 18 ; i ++ ) {
            hashtable.put(i,i) ;
        }
    }
}

// 扩容二
package map.hashtable;

import java.util.Hashtable;

public class HashtableIncrement {

    @SuppressWarnings({"all"})
    public static void main(String[] args) {

        Hashtable hashtable = new Hashtable();

        for (int i = 1 ; i <= 20 ; i ++ ) {
            hashtable.put(new Person(i),1) ;
        }
    }
}

class Person {

    private int i ;

    public Person(int i) {
        this.i = i;
    }

    @Override
    public int hashCode() {
        return 100;
    }

    @Override
    public String toString() {
        return "Person{" +
                "i=" + i +
                '}';
    }
}

3-Hashtable 和 HashMap 对比

Map 版本 线程安全 效率 语序 null 键 null 值
HashMap 1.2 不安全 可以
Hashtable 1.0 安全 较低 不可以

标签:10,HashMap,源码,Hashtable,null,底层
From: https://www.cnblogs.com/Yao-happy/p/18299446

相关文章

  • 游戏陪玩平台源码,日期格式化的代码分析
    游戏陪玩平台源码,日期格式化的代码分析日期格式化//格式化日期类型,fmt格式可选择functiondateFormat(fmt,date){letret;letopt={"Y+":date.getFullYear().toString(),//年"M+":(date.getMonth()+1).toString(),//月"D+":date.get......
  • 游戏陪玩系统源码,时间转换及时分秒差值计算
    游戏陪玩系统源码,时间转换及时分秒差值计算时间转换(秒数转时分秒)functiontimeFormat(sec){letminite=Math.floor((sec/60%60))<10?'0'+Math.floor((sec/60%60)):Math.floor((sec/60%60));letsecond=Math.floor((sec%60))<10?......
  • 【高中数学/指数、对数】已知a=e^0.03-1,b=3/103,c=ln1.03,则a、b、c的大小关系为?
    【问题】已知a=e^0.03-1,b=3/103,c=ln1.03,则a、b、c的大小关系为?【解答】这个问题比较令人挠头,其背后考察的其实是对y=e^x-1,y=x/1+x,y=ln(1+x)的图线的高度、位置、斜率的掌握程度。首先我们可以将三个数变成函数式:a=e^0.03-1,b=0.03/1+0.03,c=ln(1+0.03) 这样,自变量x......
  • C基础day10
    #include<myhead.h>#defineMax_Size100//strlen函数intmy_strlen(constchar*str){ intlen=0; while(*str++!='\0') { len++; } returnlen;}//strcpy函数voidmy_strcpy(char*dest,constchar*src){ while(*src)//遍历src将src赋值给de......
  • 教你使用 python 不到100行 制作 音乐播放器
    在这篇博客中,我们将使用Python的PyQt5和pygame库来创建一个简单的音乐播放器应用程序。我们的音乐播放器将具有基本的播放、暂停、上一首和下一首功能。导入所需的库首先,我们需要导入我们将在应用程序中使用的库:importosimportpygameimportqtawesomeasqtafr......
  • 数据挖掘习题10
    1.题干    客户细分是将市场细分为具有相似特征的离散客户群体。客户细分可以成为识别未满足客户需求的有力手段。利用上述数据,公司可以通过开发具有独特吸引力的产品和服务来超越竞争对手。   现有某超市客户的特征数据集,包括客户编号(ID),性别,婚姻状况(Marital......
  • leetcode简单题21 N.104 二叉树的最大深度 rust描述
     //[3,9,20,null,null,15,7]3//[1,null,2]2usestd::rc::Rc;usestd::cell::RefCell;//Definitionforabinarytreenode.#[derive(Debug,PartialEq,Eq)]pubstructTreeNode{pubval:i32,publeft:Option<Rc<RefCell<TreeNode>>......
  • 微信小程序毕业设计-高校校园交友系统项目开发实战(附源码+论文)
    大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。......
  • 微信小程序毕业设计-学习资料库系统项目开发实战(附源码+论文)
    大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。......
  • 基于springboot的医院资源管理系统,附源码+数据库+论文,包远程安装调试
    1、项目介绍互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为人们提供服务。针对信息管理混乱,出错率高,信息安全性差,劳动强度大,费时费力等问题,采用医院资源管理系统可以有效管理,使信息......