Java集合·10·HashTable詳解

一、概述

和HashMap一樣,Hashtable 也是一個(gè)散列表,它存儲(chǔ)的內(nèi)容是鍵值對(duì)(key-value)映射。

繼承于Dictionary,實(shí)現(xiàn)了Map、Cloneable、java.io.Serializable接口。

二、數(shù)據(jù)結(jié)構(gòu)

拉鏈法:數(shù)組+鏈表,和HashTable一樣

三、特點(diǎn)

  • 線程安全
  • 不容許null值
  • 無序
  • Iterator是fail-fast的

四、實(shí)現(xiàn)要點(diǎn)

1. 基本實(shí)現(xiàn)

和hashMap一致

2. hash相關(guān)

hashMao一致

3. 訪問方式

提供兩種訪問方式:

Enumeration

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

Iterator

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

Enumerator

實(shí)現(xiàn)了Enumeration、Iterator接口,實(shí)現(xiàn)原理和HashMap中Iterator一樣

當(dāng)元素為空時(shí)

返回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方法時(shí)進(jìn)行判斷,key/value為null時(shí)拋出NullPointerException

5. 線程安全實(shí)現(xiàn)方式

三點(diǎn):

  • public方法添加同步鎖synchronized
  • 返回視圖時(shí)使用Collections.synchronizedSet
  • Iterator中方法加同步鎖synchronized
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 醫(yī)院門前依舊人頭攢動(dòng),昔日寬闊的路面被交錯(cuò)的立交橋取代,路上依然車流擁堵,公交車上依然人滿為患,路邊的銀行大樓煥然...
    雲(yún)裳閱讀 252評(píng)論 0 5
  • 那雨那人曾在, 此時(shí)此地當(dāng)年。 執(zhí)手青絲飛暮雪, 漫道良宵無剩弦。 同裘不夜寒。 三載纏綿別后, 一身淪落燈前。 ...
    一隅偏安閱讀 535評(píng)論 2 8
  • 手機(jī)內(nèi)存又不夠用了吧?刪刪刪還是沒用? 今天,教大家?guī)渍?,將微信這幾個(gè)功能關(guān)閉,可以省出不少空間。 初級(jí)技巧清理微...
    浮宸閱讀 492評(píng)論 1 1
  • 這是前不久,一個(gè)有些陰郁的早晨,我嘴里正叼著剛買來的雜糧煎餅,擠在熙熙攘攘的人群中趕去上班。路過天橋的時(shí)候,這水泄...
    薛宇飏閱讀 198評(píng)論 0 0

友情鏈接更多精彩內(nèi)容