Java集合·10·HashTable详解

一、概述

和HashMap一样,Hashtable 也是一个散列表,它存储的内容是键值对(key-value)映射。

继承于Dictionary,实现了Map、Cloneable、java.io.Serializable接口。

二、数据结构

拉链法:数组+链表,和HashTable一样

三、特点

  • 线程安全
  • 不容许null值
  • 无序
  • Iterator是fail-fast的

四、实现要点

1. 基本实现

和hashMap一致

2. hash相关

hashMao一致

3. 访问方式

提供两种访问方式:

Enumeration

Dictionary定义接口返回Enumeration<E>,返回Enumerator(type = KEYS/value = VALUES)

Iterator

Dictionary定义接口返回Enumeration<E>,返回Enumerator(type = KEYS/value = VALUES)

Enumerator

实现了Enumeration、Iterator接口,实现原理和HashMap中Iterator一样

当元素为空时

返回Collections.emptyEnumeration()或者Collections.emptyIterator()

public static <T> Iterator<T> emptyIterator() {
        return (Iterator<T>) EmptyIterator.EMPTY_ITERATOR;
    }

    private static class EmptyIterator<E> implements Iterator<E> {
        static final EmptyIterator<Object> EMPTY_ITERATOR
            = new EmptyIterator<>();

        public boolean hasNext() { return false; }
        public E next() { throw new NoSuchElementException(); }
        public void remove() { throw new IllegalStateException(); }
        @Override
        public void forEachRemaining(Consumer<? super E> action) {
            Objects.requireNonNull(action);
        }
    }

4. null值处理

在public方法时进行判断,key/value为null时抛出NullPointerException

5. 线程安全实现方式

三点:

  • public方法添加同步锁synchronized
  • 返回视图时使用Collections.synchronizedSet
  • Iterator中方法加同步锁synchronized
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 医院门前依旧人头攒动,昔日宽阔的路面被交错的立交桥取代,路上依然车流拥堵,公交车上依然人满为患,路边的银行大楼焕然...
    雲裳阅读 253评论 0 5
  • 那雨那人曾在, 此时此地当年。 执手青丝飞暮雪, 漫道良宵无剩弦。 同裘不夜寒。 三载缠绵别后, 一身沦落灯前。 ...
    一隅偏安阅读 538评论 2 8
  • 手机内存又不够用了吧?删删删还是没用? 今天,教大家几招,将微信这几个功能关闭,可以省出不少空间。 初级技巧清理微...
    浮宸阅读 492评论 1 1
  • 这是前不久,一个有些阴郁的早晨,我嘴里正叼着刚买来的杂粮煎饼,挤在熙熙攘攘的人群中赶去上班。路过天桥的时候,这水泄...
    薛宇飏阅读 200评论 0 0

友情链接更多精彩内容