本文目錄一覽:
2020-01-17:java中,HashMap底層數據結構是什麼?
HashMap的數據結構為:數組+(鏈表或紅黑樹)
hashmap的數據結構
為什麼採用這種結構來存儲元素呢?
數組的特點:查詢效率高,插入,刪除效率低。
鏈表的特點:查詢效率低,插入刪除效率高。
在HashMap底層使用數組加(鏈表或紅黑樹)的結構完美的解決了數組和鏈表的問題,使得查詢和插入,刪除的效率都很高~
java編程抽象類技術如何實現?
java編程一直以來都是互聯網上使用比較廣泛的一種編程語言,所以我們今天就一起來了解一下java編程中的抽象類是如何來實現的,希望通過對本文的閱讀,大家能夠對java編程技術有更深刻的認識,下面昆明電腦培訓就開始今天的主要內容吧。
AbstractMap抽象類實現了一些簡單且通用的方法,本身並不難。但在這個抽象類中有兩個方法非常值得關注,keySet和values方法源碼的實現可以說是教科書式的典範。
抽象類通常作為一種骨架實現,為各自子類實現公共的方法。上一篇我們講解了Map介面,此篇對AbstractMap抽象類進行剖析研究。
Java中Map類型的數據結構有相當多,AbstractMap作為它們的骨架實現實現了Map介面部分方法,也就是說為它的子類各種Map提供了公共的方法,沒有實現的方法各種Map可能有所不同。
抽象類不能通過new關鍵字直接創建抽象類的實例,但它可以有構造方法。AbstractMap提供了一個protected修飾的無參構造方法,意味著只有它的子類才能訪問(當然它本身就是一個抽象類,其他類也不能直接對其實例化),也就是說只有它的子類才能調用這個無參的構造方法。
在Map介面中其內部定義了一個Entry介面,這個介面是Map映射的內部實現用於維護一個key-value鍵值對,key-value存儲在這個Map.Entry中。AbstractMap對這個內部介面進行了實現,一共有兩個:一個是可變的SimpleEntry和一個是不可變的SimpleImmutableEntry。
publicstaticclassSimpleEntryimplementsEntry,java.io.Serializable
實現了Map.Entry介面,並且實現了Serializable(可被序列化)。
它的方法比較簡單都是取值存值的操作,對於key值的定義是一個final修飾意味著是一個不可變的引用。另外其setValue方法稍微特殊,存入value值返回的並不是存入的值,而是返回的以前的舊值。需要重點學習的是它重寫的equals和hashCode方法。
publicstaticclassSimpleImmutableEntryimplementsEntry,java.io.SerializableSimpleImmutableEntry
定義為不可變的Entry,其實是事實不可變,因為它不提供setValue方法,在多個線程同時訪問時自然不能通過setValue方法進行修改。它相比於SimpleEntry其key和value成員變數都被定義為了final類型。調用setValue方法將會拋出UnsupportedOperationException異常。
它的equals和hashCode方法和SimpleEntry一致。
接下來查看AbstractMap抽象類實現了哪些Map介面中的方法。
publicintsize()
Map中定義了一個entrySet方法,返回的是Map.Entry的Set集合,直接調用Set集合的size方法即是Map的大小。
publicbooleanisEmpty()
調用上面的size方法,等於0即為空。
publicbooleancontainsKey(Objectkey)
這個方法的實現較為簡單,通過調用entrySet方法獲取Set集合的迭代器遍歷Map.Entry,與參數key比較。Map可以存儲為null的key值,由於key=null在Map中存儲比較特殊(不能計算hashCode值),所以在這裡也做了判斷參數key是否為空。
Java的數據結構你用過哪些?Map與Set的本質區別是什麼?
java中常見的數據結構有:
數組
集合類——Collection(list(ArrayList,LinkedList),set(HashSet))
List 是鏈表(介面),是可以允許出現重複值的。它的具體實現類:ArrayList和LinkedList
set 是集合(介面),不允許出現重複值。它的具體實現類HashMap
ArrayList 實現鏈表的內部結構是用數組(Array)。查找高效,修改低效
LinkedList 實現鏈表的內部結構是鏈表(Linked)。查找低效,修改高效
set是集合(介面),不允許出現重複值
Iterator迭代器
簡介:java提供的迭代器介面進行java collection的遍歷。Iterator模式是用於遍歷類的標準訪問方法
所有的繼承Coollection的集合類子類,都有Iterator()方法用於反饋迭代器,程序額可以獲取這個迭代器對象對Collection對象中的元素進行遍歷。
鍵值對容器 ——Map
Map是一種把鍵對象和值對象進行關聯的容器
指出:像set一樣,一個Map容器中的鍵對象不允許重複,這是為了保證查找結果的一致性。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/279122.html