Java容器——Hashtable(Java8)源码解析

本文深入解析Java中的Hashtable,它是一个线程安全的键值对存储容器,源于JDK1.0。通过源码分析,文章详细介绍了Hashtable的组成元素,包括Entry结构、构造函数;函数概览,如关键函数的哈希计算、扩容机制、增删改查操作。尽管由于线程安全和效率问题,Hashtable的使用逐渐减少,但它在多线程环境中的安全特性仍有其价值。
摘要由CSDN通过智能技术生成

    Hashtable是一种键值对型Java存储容器,自JDK1.0沿用至今。经常有将Hashtable和HashMap进行比较的例子和文章,实际上早期二者的实现原理基本一致,而HashTable的操作方法都进行了加锁,因而线程安全。本文从源码角度介绍HashTable的实现。

    一 组成元素

    1 关键变量

     /**
     * Hashtable bucket collision list entry
     */
    private static class Entry<K,V> implements Map.Entry<K,V> {
        final int hash;
        final K key;
        V value;
        Entry<K,V> next;

        protected Entry(int hash, K key, V value, Entry<K,V> next) {
            this.hash = hash;
            this.key =  key;
            this.value = value;
            this.next = next;
        }
         ...
    
        // Map.Entry Ops

        public K getKey() {
            return key;
        }

        public V getValue() {
            return value;
        }

        public V setValue(V value) {
            if (value == null)
                throw new NullPointerException();

            V oldValue = this.value;
            this.value = value;
            return oldValue;
        }

        public boolean equals(Object o) {
            if (!(o instanceof Map.Entry))
                return false;
            Map.Entry<?,?> e = (Map.Entry<?,?>)o;

            return (key==null ? e.getKey()==null : key.equals(e.getKey())) &&
               (value==null ? e.getValue()==null : value.equals(e.getValue()));
        }

        public int hashCode() {
            return hash ^ Objects.hashCode(value);
        }
    }

    前面说到,Hashtable是存储键值对的容器,Entry<K,V>这个内部类就是实现键值对的最小组成元素。如执行下面的这段代码 Hashtable<String, Integer> numbers = new Hashtable<String, Integer>();numbers.put("one", 1); ("one",1)就组成了<String,Integer>的Entry。而整个Hashtable的操作实际上也就是Entry的增删改查等的操作,归根到底,最需要关注的是Entry的存储方式,这样才能理解各个操作的步骤和含义。

     /**
     * The hash table data.
     */
    private transient Entry<?,?>[] table;

    /**
     * The total number of entries in the hash table.
     */
    private
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值