• 【Java集合框架】20 ——HashTable 类


    一、HashTable 类的外部介绍

    Hashtable类实现了一个hash table,它将键映射到值。任何非空对象都可以用作键或值。要成功地从哈希表中存储和检索对象,用作键的对象必须实现hashCode方法和equals方法。

    HashTable 的特点:

    • 它类似于HashMap,但是同步的
    • Hashtable 将键/值对存储在哈希表中。
    • 在Hashtable中,我们指定一个用作键的对象,以及我们想要与该键关联的值。然后对键进行散列处理,得到的散列代码用作表中存储值的索引。
    • Hashtable是一个列表的数组。每个列表被称为一个桶。bucket的位置通过调用hashcode()方法来标识。哈希表包含基于键的值。
    • Hashtable类的初始默认容量是11,而loadFactor是0.75
    • HashMap不提供任何枚举,而Hashtable不提供快速失败枚举
    • Hashtable类包含唯一的元素。
    • Hashtable类不允许空键或空值。

    HashTable 的层次结构:
    在这里插入图片描述

    HashTable 的类声明:

    public class Hashtable<K,V> extends Dictionary<K,V> implements Map<K,V>, Cloneable, java.io.Serializable
    
    • 1

    类型参数:

    • K—此映射维护的键类型
    • V -映射值的类型

    Hashtable类的构造函数:

    ConstructorDescription
    Hashtable()它创建一个具有初始默认容量和负载因子的空哈希表。
    Hashtable(int capacity)它接受一个整数参数,并创建一个包含指定初始容量的哈希表。
    Hashtable(int capacity, float loadFactor)它用于创建一个具有指定初始容量和loadFactor的哈希表。
    Hashtable(Map t)它创建一个新的哈希表,具有与给定Map相同的映射。

    二、HashTable 类的操作

    2.1 访问操作

    为了向哈希表中添加元素,可以使用put()方法。但是,插入顺序不保留在哈希表中。在内部,为每个元素生成一个单独的散列,并基于这个散列对元素进行索引,以提高效率。

    实例:

        public static void main(String[] args) {
            Hashtable<Integer, String> ht1 = new Hashtable<>();
            Hashtable<Integer, String> ht2 = new Hashtable<Integer, String>();
    
            // 添加元素
            ht1.put(1, "深圳");
            ht1.put(2, "广州");
            ht1.put(3, "珠海");
    
            ht2.put(1, "佛山");
            ht2.put(2, "惠州");
            ht2.put(3, "江门");
    
            // Print mappings to the console
            System.out.println("集合1 : " + ht1);
            System.out.println("集合2 : " + ht2);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    输出:

    集合1 : {3=珠海, 2=广州, 1=深圳}
    集合2 : {3=江门, 2=惠州, 1=佛山}
    
    • 1
    • 2

    2.2 修改操作

    添加元素之后,如果我们希望更改元素,可以使用put()方法再次添加元素。由于哈希表中的元素是使用键建立索引的,因此键的值可以通过简单地插入我们希望更改的键的更新值来更改。

    实例:

        public static void main(String[] args) {
            Hashtable<Integer, String> ht1 = new Hashtable<>();
    
    
            // 添加元素
            ht1.put(1, "深圳");
            ht1.put(2, "广州");
            ht1.put(3, "珠海");
    
            System.out.println("修改前: " + ht1);
    
            ht1.put(2,"佛山");
    
    
            System.out.println("修改后 : " + ht1);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    输出:

    修改前: {3=珠海, 2=广州, 1=深圳}
    修改后 : {3=珠海, 2=佛山, 1=深圳}
    
    • 1
    • 2

    2.3 删除操作

    为了从Map中删除一个元素,我们可以使用remove()方法。此方法获取键值,并从该映射中移除某个键的映射(如果该键在映射中存在)。

    实例:

        public static void main(String[] args) {
            Hashtable<Integer, String> ht1 = new Hashtable<>();
    
    
            // 添加元素
            ht1.put(1, "深圳");
            ht1.put(2, "广州");
            ht1.put(3, "珠海");
    
            System.out.println("删除前: " + ht1);
    
            ht1.remove(2);
    
    
            System.out.println("删除后 : " + ht1);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    输出:

    删除前: {3=珠海, 2=广州, 1=深圳}
    删除后 : {3=珠海, 1=深圳}
    
    • 1
    • 2

    2.4 迭代操作

    为了迭代该表,我们可以使用高级的for循环。

    实例:

        public static void main(String[] args) {
            Hashtable<Integer, String> ht1 = new Hashtable<>();
    
    
            // 添加元素
            ht1.put(1, "深圳");
            ht1.put(2, "广州");
            ht1.put(3, "珠海");
    
            System.out.println("集合1: " + ht1);
    
    
            // for-each 循环
            for (Map.Entry<Integer, String> e : ht1.entrySet())
                System.out.println(e.getKey() + " "
                        + e.getValue());
    
    
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    输出:

    集合1: {3=珠海, 2=广州, 1=深圳}
    3 珠海
    2 广州
    1 深圳
    
    • 1
    • 2
    • 3
    • 4

    三、HashTable 类的API

    待续

    四、HashTable 类的内部结构

    待续

  • 相关阅读:
    顺序表的删除,插入和查找操作
    mysql远程连接 Communications link failure失败问题
    [buuctf.reverse] 126-130
    Design A Youtube
    Redis/Mysql知识概述
    【限流与Sentinel超详细分析】
    centos安装Redis
    使用scroll-view实现滑块视图可能遇到的问题及其解决方法
    【从入门到精通系列】-- MySQL(持续更新中……)
    Unity-协同程序
  • 原文地址:https://blog.csdn.net/weixin_44735928/article/details/126239341