java hashtable排序_java中哈希表中有迭代器模式的实现,可以认为其是顺序表吗?...
先上答案:HashTable (哈希表)不是順序表。
分析如下:
要搞清楚這個問題需要明確兩個問題:
1. 什么是順序表
2. 哈希表的數據結構
先說什么是順序表。WIKI的解釋是:順序表是在計算機內存中以數組的形式保存的線性表,是指用一組地址連續的存儲單元依次存儲數據元素的線性結構。
簡而言之,順序表就是用數組作為底層存儲的數據結構,和鏈表相對。在Java中ArrayList就是一個順序表。而LinkedList就是一個鏈表。
順序表的特點是:表長度等于底層數組的長度,插入新元素的位置為前一元素位置+1.
那么HashTable是以數組作為底層存儲結構的嘛?這就涉及到第二個問題:哈希表的數據結構。
乍一看確實,HashTable最重要的成員變量就是一個叫table的數組。但是仔細看就會發現這個數組的每個元素是一個Entry 對象。那么什么是Entry?
注意Entry的next成員變量:這表明Entry是一個鏈表的節點,每個Entry都包含自己下一節點的引用。
如果我們再仔細閱讀put(key, value) 方法就會發現,當往HashTable插入元素( pair)時HashTable會首先把新元素wrap成一個Entry object,然后根據Key的哈希值選擇table數組的某一位置插入Entry 對象,如果那個位置已經有Entry對象了(即:哈希碰撞),則把新的Entry object添加到舊的Entry的后面成為鏈表中的新節點。
所以邏輯上,HashTable只是用數組最為哈希桶,而每個桶里存儲的是一個鏈表。哈希表的長度顯然不等于table數組的長度而是每個鏈表的長度的總和。哈希表插入元素也是非順序的(不是按數組下標依次插入的,插入的元素也無法按照數組下標檢索)。
話說回來,有沒有實現迭代器Iterator并不能作為是不是順序表的判斷標準。
總結
以上是生活随笔為你收集整理的java hashtable排序_java中哈希表中有迭代器模式的实现,可以认为其是顺序表吗?...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux和java_java内存和li
- 下一篇: java list 替换 多线程_Jav