1. 程式人生 > >Java集合---HashTable原始碼剖析

Java集合---HashTable原始碼剖析

<code class="language-java hljs ">    private class Enumerator<t> implements Enumeration<t>, Iterator<t> {

        Entry[] table = Hashtable.this.table;

        int index = table.length;

        Entry<k,v> entry = null;

        Entry<k,v> lastReturned = null;

        int type;

        /**

         * Indicates whether this Enumerator is serving as an Iterator

         * or an Enumeration.  (true -> Iterator).

         */

        boolean iterator;

        /**

         * The modCount value that the iterator believes that the backing

         * Hashtable should have.  If this expectation is violated, the iterator

         * has detected concurrent modification.

         */

        protected int expectedModCount = modCount;

        Enumerator(int type, boolean iterator) {

            this.type = type;

            this.iterator = iterator;

        }

        public boolean hasMoreElements() {

            Entry<k,v> e = entry;

            int i = index;

            Entry[] t = table;

            /* Use locals for faster loop iteration */

            while (e == null && i > 0) {

                e = t[--i];

            }

            entry = e;

            index = i;

            return e != null;

        }

        public T nextElement() {

            Entry<k,v> et = entry;

            int i = index;

            Entry[] t = table;

            /* Use locals for faster loop iteration */

            while (et == null && i > 0) {

                et = t[--i];

            }

            entry = et;

            index = i;

            if (et != null) {

                Entry<k,v> e = lastReturned = entry;

                entry = e.next;

                return type == KEYS ? (T)e.key : (type == VALUES ? (T)e.value : (T)e);

            }

            throw new NoSuchElementException("Hashtable Enumerator");

        }

        // Iterator methods

        public boolean hasNext() {

            return hasMoreElements();

        }

        public T next() {

            if (modCount != expectedModCount)

                throw new ConcurrentModificationException();

            return nextElement();

        }

        public void remove() {

            if (!iterator)

                throw new UnsupportedOperationException();

            if (lastReturned == null)

                throw new IllegalStateException("Hashtable Enumerator");

            if (modCount != expectedModCount)

                throw new ConcurrentModificationException();

            synchronized(Hashtable.this) {

                Entry[] tab = Hashtable.this.table;

                int index = (lastReturned.hash & 0x7FFFFFFF) % tab.length;

                for (Entry<k,v> e = tab[index], prev = null; e != null;

                     prev = e, e = e.next) {

                    if (e == lastReturned) {

                        modCount++;

                        expectedModCount++;

                        if (prev == null)

                            tab[index] = e.next;

                        else

                            prev.next = e.next;

                        count--;

                        lastReturned = null;

                        return;

                    }

                }

                throw new ConcurrentModificationException();

            }

        }

    }  </k,v></k,v></k,v></k,v></k,v></k,v></t></t></t></code>

相關推薦

Java集合---HashTable原始碼剖析

<code class="language-java hljs ">    private class Enumerator<t> implements Enumeration<t>, Iterator<t> {         Entry[] tabl

[JDK1.6] JAVA集合 Hashtable 原始碼淺析

文章目錄 (一) 簡介: Hashtable 體系結構: Hashtable 欄位屬性: Hashtabl 儲存 (鍵-值) 的節點 Entry: 構造方法: 儲存 鍵-值 put(K, V) 擴容 rehash: 獲取資料

java集合框架原始碼剖析系列】java原始碼剖析之HashMap

前言:之所以打算寫java集合框架原始碼剖析系列部落格是因為自己反思了一下阿里內推一面的失敗(估計沒過,因為寫此部落格已距阿里巴巴一面一個星期),當時面試完之後感覺自己回答的挺好的,而且據面試官最後說的這幾天可能會和你聯絡來看當時以為自己一面應該是通過的,但是事與願違,痛定

轉:【Java集合源碼剖析】LinkedList源碼剖析

exception 循環鏈表 位置 src zab ear 方法 劃分 head 轉載請註明出處:http://blog.csdn.net/ns_code/article/details/35787253 您好,我正在參加CSDN博文大賽,如果您喜歡我的文章,希望您

轉:【Java集合源碼剖析】Vector源碼剖析

pro try detail java 否則 super() empty init word 轉載請註明出處:http://blog.csdn.net/ns_code/article/details/35793865 Vector簡介 Vector也是基於數

轉:【Java集合源碼剖析】LinkedHashmap源碼剖析

知識庫 csdn val ride 初始 views 特性 read details 轉載請註明出處:http://blog.csdn.net/ns_code/article/details/37867985 前言:有網友建議分析下LinkedHashMap的源

Java集合——LinkedList原始碼分析

一 前言 上一篇我們介紹了ArrayList原始碼解析有想看的同學可以點選這個連結ArrayList原始碼解析。平時我們或多或少都用過LinKedList,但是對其原理不是很瞭解,我們就來一起學習吧。 二 原始碼解析 1. LinkedList概述 LinkedList是

Java集合原始碼解析:AbstractMap

目錄 引言 原始碼解析 抽象函式entrySet() 兩個集合檢視 操作方法 兩個子類 參考: 引言 今天學習一個Java集合的一個抽象類 AbstractMap ,AbstractMap 是Map介面的 實現類之一,也是HashMap、T

Java集合原始碼解析:HashMap (基於JDK1.8)

目錄 前言 HashMap的資料結構 深入原始碼 兩個引數 成員變數 四個構造方法 插入資料的方法:put() 雜湊函式:hash() 動態擴容:resize() 節點樹化、紅黑樹的拆分 節點樹化

Java集合原始碼解析:Vector

引言 之前的文章我們學習了一個集合類 ArrayList,今天講它的一個兄弟 Vector。 為什麼說是它兄弟呢?因為從容器的構造來說,Vector 簡直就是 ArrayList 的翻版,也是基於陣列的資料結構,不同的是,Vector的每個方法都加了 synchronized 修飾符,是執行緒安全的。 類

Java集合--HashTable

簡單看一下 HashTable 內部結構 public class Hashtable<K,V> extends Dictionary<K,V> implements Map<K,V>, Cloneable, java.io.Serializable {

Java集合--LinkedHashMap原始碼分析

概述 分析一下 LinkedHashMap 原始碼,看下內部結構,研究一下如何保證訪問順序。 繼承關係 public class LinkedHashMap<K,V> extends HashMap<K,V> implements Map<K,V

Java集合 | LinkedList 原始碼分析(JDK 1.8)

一、基本圖示 二、基本介紹 public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, De

java集合原始碼詳解-LinkedList(4)-基於JDK8

LinkedList 裡面還有個具有新增功能的函式,上回學漏了,這回補上。 它就是linkBefore()------在一個非空節點前,插入資料 這裡打上個斷點 點選下一步。先把size除二  ,去比較。具體的這個node()方法,我們之前學過,這裡跳過。這個方法,其實就

Java集合&Spring原始碼淺讀

記錄自己現在知道的,以後瞭解了更多的話,再繼續補上來 Java集合類 Collection 介面 說明:是List,set 的父類。定義了集合初始模樣。集合只儲存物件。 Jdk8文件,內部方法定義有: List介面 說明:有序集合,可重複,繼承Collection。常用實現類ArrayList,L

JAVA集合-03ArrayList原始碼解析和使用例項

上一章講解了Collection介面下得抽象類和繼承介面,後續深入到具體的實現類,部落格及對應得程式碼可在github上檢視 ArrayList簡介 ArrayList底層實現是陣列,相較於陣列固定大小,ArrayList可以動態的增加;ArrayList繼承AbstractCollect

Java 集合 | LinkedHashMap原始碼分析(JDK 1.7)

一、基本圖示 二、基本介紹 public class LinkedHashMap<K,V> extends HashMap<K,V> implements Map<K,V> 結構 LinkedHashM

java集合核心原始碼01——ArrayList

首先呢,對於ArrayList,相當於一個動態陣列,裡面可以儲存重複資料,並且支援隨機訪問,不是執行緒安全的。對於更多的底層東西,且聽分解。 開啟原始碼,先看繼承了哪些類,實現了哪些介面,然後繼承的這些類或介面是否還有父類,一直深挖到頂部   public class ArrayList

Java集合---LinkedList原始碼解析

一、原始碼解析     1、 LinkedList類定義。 public class LinkedList<E> extends AbstractSequentialList<E> implements List<E&

Java集合原始碼解析:ArrayList

目錄 前言 今天學習一個Java集合類使用最多的類 ArrayList , ArrayList 繼承了 AbstractList,並實現了List 和 RandomAccess 等介面, public class ArrayList<E> extends AbstractList<E>