Java-API简析_java.util.HashTable<K, V>类(基于 Latest JDK)(浅析源码)

【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)
https://blog.csdn.net/m0_69908381/article/details/132522445
出自【进步*于辰的博客】

因为我发现目前,我对Java-API的学习意识比较薄弱,需要慢慢习惯使用Java-API,乃至剖析源码来提升自己的源码阅读能力和编码素质。
大家如果需要Java-API文档,我上传了【https://download.csdn.net/download/m0_69908381/87691693】。

文章目录

  • 1、概述
  • 2、构造方法摘要
    • 2.1 null
    • 2.2 int initialCapacity
    • 2.3 int initialCapacity, float loadFactor
    • 2.4 Map<? extends K,? extends V> t
  • 3、方法摘要
    • 3.1 void clear()
    • 3.2 Object clone()
    • 3.3 boolean contains(Object value)
    • 3.4 boolean containsKey(Object key)
    • 3.5 boolean containsValue(Object value)
    • 3.6 Enumeration`<V>` elements()
    • 3.7 Set<Map.Entry<K, V>> entrySet()
    • 3.8 boolean equals(Object o)
    • 3.9 V get(Object key)
    • 3.10 int hashCode()
    • 3.11 boolean isEmpty()
    • 3.12 Enumeration`<K>` keys()
    • 3.13 Set`<K>` keySet()
    • 3.14 V put(K key, V value)
    • 3.15 void putAll(Map<? extends K,? extends V> t)
    • 3.16 protected void rehash()
    • 3.17 V remove(Object key)
    • 3.18 int size()
    • 3.19 String toString()
    • 3.20 Collection`<V>` values()

1、概述

继承关系:

  • java.lang.Object
    • java.util.Dictionary<K,V>
      • java.util.Hashtable<K,V>

所有已实现的接口:
Serializable、Cloneable、Map<K,V>

直接已知子类:
Properties、UIDefaults


public class Hashtable<K,V> extends Dictionary<K,V> implements Map<K,V>, Cloneable, Serializable

此类实现一个哈希表,该哈希表将键映射到相应的值。任何非 null 对象都可以用作键或值

为了成功地在哈希表中存储和检索对象,用作键的对象必须实现 hashCode() 方法和 equals() 方法

Hashtable 的实例有两个参数影响其性能:初始容量加载因子容量 是哈希表中 的数量,初始容量 就是哈希表创建时的容量。注意,哈希表的状态为 open()在发生“哈希冲突”的情况下,单个桶会存储多个条目,这些条目必须按顺序搜索加载因子 是对哈希表在其容量自动增加之前可以达到多满的一个尺度。初始容量加载因子 这两个参数只是对该实现的提示。关于何时以及是否调用 rehash() 方法的具体细节则依赖于该实现。 (关于“加载因子”,详述可参考博文【关于对【Hashtable数据结构以及对象在JVM堆中的存储过程】的理解与简述】的第3.1项)

通常,默认加载因子(0.75)在时间和空间成本上寻求一种折中。加载因子过高虽然减少了空间开销,但同时也增加了查找某个条目的时间(在大多数 Hashtable 操作中,包括 get()put() 操作,都反映了这一点)。

初始容量主要控制空间消耗与执行 rehash() 操作所需要的时间损耗之间的平衡。如果初始容量大于 Hashtable 所包含的最大条目数除以加载因子,则永远 不会发生 rehash() 操作。但是,将初始容量设置太高可能会浪费空间。

如果很多条目要存储在一个 Hashtable 中,那么与根据需要执行自动 rehashing() 操作来增大表的容量的做法相比,使用足够大的初始容量创建哈希表或许可以更有效地插入条目

下面这个示例创建了一个数字的哈希表。它将数字的名称用作键:

Hashtable numbers = new Hashtable();
numbers.put("one", new Integer(1));
numbers.put("two", new Integer(2));
numbers.put("three", new Integer(3));

要检索一个数字,可以使用以下代码:

Integern = (Integer)numbers.get("two");
if (n != null) {System.out.println("two = " + n);
}

自 Java 2 平台 v1.2 以来,此类已经改进为可以实现 Map,因此它变成了 Java Collections Framework 的一部分。与新集合的实现不同,Hashtable 是同步的。

由迭代器返回的 Iterator() 和由所有 Hashtable 的“collection 视图方法”返回的 Collection 的 listIterator() 方法都是快速失败:在创建 Iterator 之后,如果从结构上对 Hashtable 进行修改,除非通过 Iterator 自身的移除或添加方法,否则在任何时间以任何方式对其进行修改,Iterator 都将抛出 ConcurrentModificationException。因此,面对并发的修改,Iterator 很快就会完全失败,而不冒在将来某个不确定的时间发生任意不确定行为的风险。由 Hashtable 的键和值方法返回的 Enumeration() 不是快速失败的

注意,迭代器的快速失败行为无法得到保证,因为一般来说,不可能对是否出现不同步并发修改做出任何硬性保证。快速失败迭代器会尽最大努力抛出 ConcurrentModificationException。因此,为提高这类迭代器的正确性而编写一个依赖于此异常的程序是错误做法:迭代器的快速失败行为应该仅用于检测程序错误

此类是 Java Collections Framework 的成员。

从以下版本开始:
JDK1.0
另请参见:
Object.equals(java.lang.Object)Object.hashCode()rehash()、Collection、Map、HashMap、TreeMap、序列化表格

2、构造方法摘要

2.1 null

用默认的初始容量 (11) 和加载因子(0.75)构造一个新的空哈希表。

2.2 int initialCapacity

用指定初始容量和默认的加载因子(0.75)构造一个新的空哈希表。

2.3 int initialCapacity, float loadFactor

用指定初始容量和指定加载因子构造一个新的空哈希表。

2.4 Map<? extends K,? extends V> t

构造一个与给定的 Map 具有相同映射关系的新哈希表。

3、方法摘要

3.1 void clear()

将此哈希表清空,使其不包含任何键。

3.2 Object clone()

创建此哈希表的浅表复制。

3.3 boolean contains(Object value)

测试此映射表中是否存在与指定值关联的键。

3.4 boolean containsKey(Object key)

测试指定对象是否为此哈希表中的键。

3.5 boolean containsValue(Object value)

如果此 Hashtable 将一个或多个键映射到此值,则返回 true。

3.6 Enumeration<V> elements()

返回此哈希表中的值的枚举。

3.7 Set<Map.Entry<K, V>> entrySet()

返回此 Hashtable 中所包含的键的 Set 视图。

3.8 boolean equals(Object o)

按照 Map 接口的定义,比较指定 Object 与此 Map 是否相等。

3.9 V get(Object key)

返回此哈希表中指定键所映射到的值。

3.10 int hashCode()

按照 Map 接口的定义,返回此 Map 的哈希码值。

3.11 boolean isEmpty()

测试此哈希表是否没有键映射到值。

3.12 Enumeration<K> keys()

返回此哈希表中的键的枚举。

3.13 Set<K> keySet()

返回此 Hashtable 中所包含的键的 Set 视图。

3.14 V put(K key, V value)

将指定 key 映射到此哈希表中的指定 value。

3.15 void putAll(Map<? extends K,? extends V> t)

将指定 Map 的所有映射关系复制到此 Hashtable 中,这些映射关系将替换此 Hashtable 拥有的、针对当前指定 Map 中所有键的所有映射关系。

3.16 protected void rehash()

增加此哈希表的容量并在内部对其进行重组,以便更有效地容纳和访问其元素。

3.17 V remove(Object key)

从哈希表中移除该键及其相应的值。

3.18 int size()

返回此哈希表中的键的数量。

3.19 String toString()

返回此 Hashtable 对象的字符串表示形式,其形式为 ASCII 字符 ", " (逗号加空格)分隔开的、括在括号中的一组条目。

3.20 Collection<V> values()

返回此 Hashtable 中所包含值的 Collection 视图。


本文持续更新中。。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/65263.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

http和https的区别?

什么是 HTTP&#xff1f; HTTP是一种互联网数据传输协议&#xff0c;用于在网络服务器和客户端之间进行数据传输。作为万维网的基础&#xff0c;HTTP协议允许网络浏览器向网络服务器发送请求&#xff0c;服务器则会返回响应。HTTP协议基于文本&#xff0c;因此传输的数据是人类…

41.岛屿数量(第四期模拟笔试)(BFS练习题)

题目&#xff1a; 给定一个 m 行 n 列的二维地图&#xff0c;初始化每个单元格都是海洋&#xff0c;二维地图外也全是海洋。 操作 addLand 会将单元格&#xff08;col, row&#xff09;变为陆地。 定义一系列相连的被海洋包围的陆地为岛屿&#xff0c; 横向相邻或者纵向相连的…

多线程下的signal信号处理

多线程中&#xff0c;信号在哪个线程中处理是不确定的&#xff0c;可能被任意一个线程处理 下边的代码可以验证该结论&#xff0c;多次Ctrlc&#xff0c;会被不同的线程捕获此信号&#xff0c;并处理&#xff0c;最终每个线程死锁&#xff0c;阻塞在等待锁的状态 #include &l…

微信小程序请求接口返回的二维码(图片),本地工具和真机测试都能显示,上线之后不显示问题

请求后端接口返回的图片&#xff1a; 页面展示&#xff1a; 代码实现&#xff1a; :show-menu-by-longpress"true" 是长按保存图片 base64Code 是转为base64的地址 <image class"code" :src"base64Code" alt"" :show-menu-by-long…

2023-09-02力扣每日一题

链接&#xff1a; 2511. 最多可以摧毁的敌人城堡数目 题意和解&#xff1a; 阅读理解题&#xff0c;要从1到-1或-1到1&#xff0c;中间只能有0&#xff0c;求最多能有多少0 实际代码&#xff1a; #include<bits/stdc.h> using namespace std; int captureForts(vect…

C#--sugarClient使用之ColumnName

使用Sugar ORM框架可以很方便地实现表名和实体名的映射&#xff0c;可以按照以下步骤进行操作&#xff1a; 创建一个实体类&#xff0c;定义实体的属性及其他信息。 [SugarTable("user_info")] // 指定实体对应的表名 public class User {public int Id { get; set…

Three.js实现模型,模型材质可拖拽效果 DragControls

Three.js提供了一个拖拽的API DragControls 用于实现模型材质拖拽效果 DragControls&#xff1a;是一个用于在Three.js中实现拖拽控制的辅助类。它简化了在Three.js中实现拖拽物体的过程。 DragControls的构造函数接受三个参数&#xff1a; objects&#xff1a;一个包含需要…

java中用HSSFWorkbook生成xls格式的excel(亲测)

SXSSFWorkbook类是用于生成XLSX格式的Excel文件&#xff08;基于XML格式&#xff09;&#xff0c;而不是XLS格式的Excel文件&#xff08;基于二进制格式&#xff09;。 如果你需要生成XLS格式的Excel文件&#xff0c;可以使用HSSFWorkbook类。以下是一个简单的示例&#xff1a…

C# textBox 右键菜单 contextMenuStrip

需求&#xff1a; 想在上图空白处可以右键弹出菜单&#xff0c;该怎么做呢&#xff1f; 1.首先&#xff0c;拖出一个 ContextMenuStrip。 随便放哪里都行&#xff0c;如下: 2.在textBox里关联这个“右键控件”即可&#xff0c;如下&#xff1a; 最终效果如下&#xff1a; 以上…

HTML <th> 标签

实例 普通的 HTML 表格,包含两行两列: <table border="1"><tr><th>Company</th><th>Address</th></tr><tr><td>Apple, Inc.</td><td>1 Infinite Loop Cupertino, CA 95014</td></tr…

自定义类型:结构体、枚举、联合

目录 结构体 结构体的基础知识 结构的声明 特殊的声明 结构体的自引用 结构体变量的定义和初始化 结构体内存对齐 修改默认对齐数 结构体传参 位段 什么是位段 位段的内存分配 位段的跨平台问题 位段的应用 枚举 枚举类型的定义 枚举的优点 联合体&#xff08;共…

算法题打卡day51-股票问题 | 309.最佳买卖股票时机含冷冻期、714.买卖股票的最佳时机含手续费

309.最佳买卖股票含冷冻期 状态&#xff1a;Debug后AC 需要添加一个冷冻期状态和一个表示冷冻期状态的今天卖出不持有状态。代码如下&#xff1a; class Solution { public:int maxProfit(vector<int>& prices) {int len prices.size();vector<vector<int&g…

编写中间件以用于 Express 应用程序

概述 中间件函数能够访问请求对象 (req)、响应对象 (res) 以及应用程序的请求/响应循环中的下一个中间件函数。下一个中间件函数通常由名为 next 的变量来表示。 中间件函数可以执行以下任务&#xff1a; 执行任何代码。对请求和响应对象进行更改。结束请求/响应循环。调用堆…

thinkphp 使用 easypay 和 easywechat

easypay 是3.x easywechat 是6.x 引入&#xff1a; use Yansongda\Pay\Pay;//easypayuse EasyWeChat\MiniApp\Application as MiniApp;//easywechat use EasyWeChat\Pay\Application as Payapp;//easywechat public function suborder(){$order [out_trade_no > time(…

JS 常用方法汇总

本篇目录 Math字符串数组JSON日期(Date)字符数字URL其他 Math Math.max()&#xff1a;用于返回指定参数中的最大值。Math.min()&#xff1a;用于返回指定参数中的最小值。Math.random()&#xff1a;用于生成一个介于 0 到 1 之间的随机数。Math.floor()&#xff1a;用于将一个…

Zabbix Api监控项值推送:zabbix_sender

用法示例&#xff1a; zabbix_sender [-v] -z server [-p port] [-I IP-address] [-t timeout] -s host -k key -o value其中&#xff1a; -z 即 --zabbix-server&#xff0c;Zabbix server的主机名或IP地址。如果主机由proxy监控&#xff0c;则应使用proxy的主机名或IP地址-…

Java“牵手”1688图片识别商品接口数据,图片地址识别商品接口,图片识别相似商品接口,1688API申请指南

1688商城是一个网上购物平台&#xff0c;售卖各类商品&#xff0c;包括服装、鞋类、家居用品、美妆产品、电子产品等。要通过图片地址识别获取1688商品列表和商品详情页面数据&#xff0c;您可以通过开放平台的接口或者直接访问1688商城的网页来获取商品详情信息。以下是两种常…

前端面试准备学习记录 — CSS篇

2.1、CSS基础 选择器&#xff1a;id > 类 属性 伪类 > 标签 优先级&#xff1a;内联样式 > id > 类、伪类、属性 > 标签 !important优先级最高 block&#xff1a;独占一行&#xff1b;inline&#xff1a;width、height属性无效&#xff0c;水平方向的margin和…

iperf 测试网络性能

Iperf 是一个网络性能测试工具。Iperf可以测试最大TCP和UDP带宽性能&#xff0c;具有多种参数和UDP特性&#xff0c;可以根据需要调整&#xff0c;可以报告带宽、延迟抖动和数据包丢失。 官网&#xff1a;iperf.fr https://iperf.fr 支持参数 参数说明-p, --port #Server 端监…

超图嵌入论文阅读1:对偶机制非均匀超网络嵌入

超图嵌入论文阅读1&#xff1a;对偶机制非均匀超网络嵌入 原文&#xff1a;Nonuniform Hyper-Network Embedding with Dual Mechanism ——TOIS&#xff08;一区 CCF-A&#xff09; 背景 超边&#xff1a;每条边可以连接不确定数量的顶点 我们关注超网络的两个属性&#xff1…