热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

1.2HashTable

为什么80%的码农都做不了架构师?1、Hash链表结构详见:HashMap-Hash链表结构2、HashTable结构简述HashTable不仅仅

为什么80%的码农都做不了架构师?>>>   hot3.png

1、Hash链表结构

详见:HashMap-Hash链表结构

2、HashTable结构简述

HashTable不仅仅继承于Map接口实现了Map的主结构Entry,而且还是Dictionary的子类。

private static class Entry implements Map.Entry {int hash;final K key;V value;Entry next;protected Entry(int hash, K key, V value, Entry next) {this.hash = hash;this.key = key;this.value = value;this.next = next;}public V setValue(V value) {//注意,HashTable的value不可为空if (value == null)throw new NullPointerException();V oldValue = this.value;this.value = value;return oldValue;}}

HashTable的内部类Entry,包括了hash值、key、value和指向下一个Entry的引用。需要注意的是value不能为空

public class Hashtableextends Dictionaryimplements Map, Cloneable, java.io.Serializableprivate transient Entry[] table; //存储键值对的数组private transient int count; //table中存储的键值对总数private int threshold; //阈值private float loadFactor; //负载因子private transient int modCount = 0; //用于快速失败/*** 无参构造函数,hashtable的初始化容量是11,负载因子是0.75*/public Hashtable() {this(11, 0.75f);} /*** @param initialCapacity hashtable的初始化容量.*/public Hashtable(int initialCapacity) {this(initialCapacity, 0.75f);}/*** @param initialCapacity hashtable的初始化容量.* @param loadFactor 负载因子.*/public Hashtable(int initialCapacity, float loadFactor) {this.loadFactor = loadFactor;table = new Entry[initialCapacity];threshold = (int)Math.min(initialCapacity * loadFactor, MAX_ARRAY_SIZE + 1);//初始化hash种子initHashSeedAsNeeded(initialCapacity);}public Hashtable(Map t) {this(Math.max(2*t.size(), 11), 0.75f);putAll(t);}} 3、HashTable详解

3.1)关于初始化

jdk1.7中给HashTable也提供了4个构造方法,四个方法的唯一差别是对参数initialCapacity、loadFactor,提供了不同的默认值。最终还是调用initHashSeedAsNeeded方法进行hash种子初始化

 

3.2)关于写操作

3.3)关于读操作

3.4)关于扩容


转:https://my.oschina.net/shyann/blog/3006576



推荐阅读
  • 深入解析mt_allocator内存分配器(二):多线程与单线程场景下的实现
    本文详细介绍了mt_allocator内存分配器在多线程和单线程环境下的实现机制。该分配器以2的幂次方字节为单位分配内存,支持灵活的配置和高效的性能。文章分为内存池特性描述、内存池实现、单线程内存池实现、内存池策略类实现及多线程内存池实现等部分,深入探讨了内存池的初始化、内存分配与回收的具体实现。 ... [详细]
  • SpringBoot底层注解用法及原理
    2.1、组件添加1、Configuration基本使用Full模式与Lite模式示例最佳实战配置类组件之间无依赖关系用Lite模式加速容器启动过程,减少判断配置类组 ... [详细]
  • 深入解析Java并发之ArrayBlockingQueue
    本文详细探讨了ArrayBlockingQueue,这是一种基于数组实现的阻塞队列。ArrayBlockingQueue在初始化时需要指定容量,因此它是一个有界的阻塞队列。文章不仅介绍了其基本概念和数据结构,还深入分析了其源码实现,包括各种入队、出队、获取元素和删除元素的方法。 ... [详细]
  • 本文探讨了Android系统中联系人数据库的设计,特别是AbstractContactsProvider类的作用与实现。文章提供了对源代码的详细分析,并解释了该类如何支持跨数据库操作及事务处理。源代码可从官方Android网站下载。 ... [详细]
  • 深入理解Java字节码:方法调用详解
    本文详细介绍了Java字节码中的方法调用机制,通过具体示例解析了字节码如何处理方法调用及其参数传递。文章由Mahmoud Anouti撰写,原文链接:https://dzone.com/articles/introduction-to-java-bytecode ... [详细]
  • java datarow_DataSet  DataTable DataRow 深入浅出
    本篇文章适合有一定的基础的人去查看,最好学习过一定net编程基础在来查看此文章。1.概念DataSet是ADO.NET的中心概念。可以把DataSet当成内存中的数据 ... [详细]
  • 个人博客:打开链接依赖倒置原则定义依赖倒置原则(DependenceInversionPrinciple,DIP)定义如下:Highlevelmo ... [详细]
  • 本文探讨为何Request对象的外观设计被认为是精妙的,重点在于其如何利用门面模式确保数据安全,同时保持系统的高效交互。 ... [详细]
  • 本文探讨了Java中有效停止线程的多种方法,包括使用标志位、中断机制及处理阻塞I/O操作等,旨在帮助开发者避免使用已废弃的危险方法,确保线程安全和程序稳定性。 ... [详细]
  • 本文详细介绍了如何在本地环境中安装配置Frida及其服务器组件,以及如何通过Frida进行基本的应用程序动态分析,包括获取应用版本和加载的类信息。 ... [详细]
  • 本文提供了多个关键点来帮助开发者提高Java编程能力,包括代码规范、性能优化和最佳实践等方面,旨在指导读者成为更加优秀的Java程序员。 ... [详细]
  • 本文介绍了如何通过创建自定义 XML 文件来修改 Android 中 Spinner 的项样式,包括颜色和大小的调整。 ... [详细]
  • 本文介绍了一种在 Android 开发中动态修改 strings.xml 文件中字符串值的有效方法。通过使用占位符,开发者可以在运行时根据需要填充具体的值,从而提高应用的灵活性和可维护性。 ... [详细]
  • 本文探讨了如何利用 Android 的 Movie 类来展示 GIF 动画,并详细介绍了调整 GIF 尺寸以适应不同布局的方法。同时,提供了相关的代码示例和注意事项。 ... [详细]
  • 一、使用Microsoft.Office.Interop.Excel.DLL需要安装Office代码如下:2publicstaticboolExportExcel(S ... [详细]
author-avatar
佳山申士_636
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有