java Map相關總結
Map
無序儲存,儲存的元素不能重複,如果相等,直接覆蓋。
HashMap
- 陣列+連結串列+紅黑樹結構,非執行緒安全
- HashMap儲存值時不是按順序來存,而是按照雜湊值來存,取的時候同樣是按照雜湊值來取。HashMap也是不能存放相同的值,它是通過HashCode()和equals()來判斷,如果HashMap中已存在相同的物件,則覆蓋(這與HashSet不一致,HashSet遇到物件相等則不會儲存)。
- 物件相等:如果兩個引用指向同一個物件,那麼這兩個引用是相等的,他們的hashcode方法返回的值一致。如果沒有重寫Object中hashcode方法,返回的是物件在記憶體中的地址(值中帶有‘@’)。所以必須要要重寫hashCode()方法,才能使得兩個物件都有相同的hashCode,並且還要重寫equals()方法使得返回的值為true。滿足這兩個條件,那麼證明兩個物件在HashMap/HashSet中是相等的。
ConcurrentHashMap
陣列+連結串列+紅黑樹結構,執行緒安全,是HashMap的執行緒安全版
HashTable
--extends Dictionary
執行緒安全的,方法上增加了Synchronied,不推薦使用
TreeMap
- 紅黑樹結構。容器中存放的元素有序(左小右大),且不重複。
- 有序:Set是無序的,那麼TreeSet是通過什麼來給元素排序的呢?第一種,使用預設的排序規則,即元素實現Comparable介面中的compareTo方法;第二種,使用容器自身的排序規則,初始化時傳入一個Comparator,實現該介面的compare方法。 compare的優先順序高於compareTo。
- 重複:如何來判斷元素是否重複呢?也是通過compareTo或者comopare方法中的return 0 來判斷。
LinkeHashMap
會儲存插入的順序, 在通過Iterator進行遍歷的時候,先put的元素排在前面。
區分Map相關的集合貌似有點兒困難,記住這幾條黃金法則即可
- 看到Concurrent的,就想到同步
- 看到tree,就想到兩個介面:Comoparable、Comparator
- 看到linked,就想到插入順序
- 看到hash,就想到hashCode、equals
相關文章
- java Set相關總結Java
- java List相關總結Java
- java Queue佇列相關總結Java佇列
- Java與Mysql鎖相關知識總結JavaMySql
- Ajax 相關總結
- Go map相關Go
- Springmvc相關配置總結SpringMVC
- vue原理相關總結Vue
- 關於Map集合的遍歷總結
- 相機成像相關知識總結
- mysql相關問題總結MySql
- Android聲音相關總結Android
- Java集合體系總結 Set、List、Map、QueueJava
- 關於Webservice介面對接相關總結Web
- firewall-cmd 相關命令總結
- 總結 MySQL 相關知識點MySql
- JavaScript跨域相關的總結JavaScript跨域
- JVM相關知識點總結JVM
- JavaScript作用域相關的總結JavaScript
- 【Java併發程式設計】synchronized相關面試題總結Java程式設計synchronized面試題
- Java執行緒類相關面試題與答案總結Java執行緒面試題
- STL:map用法總結
- apply,map,applymap總結APP
- 備份容災相關概念總結
- 文字匹配相關方向打卡點總結
- tensorflow相關函式學習總結函式
- android反編譯相關命令總結Android編譯
- 資訊熵相關知識總結熵
- 網路、HTTP相關學習總結HTTP
- App網路相關設計總結APP
- 作業系統相關知識總結作業系統
- 老Python總結的字典相關知識Python
- Hadoop/Spark相關面試問題總結HadoopSpark面試
- HTTPS總結+相關面試問題解答HTTP面試
- MySQL 字串擷取相關函式總結MySql字串函式
- Java8 中使用Stream 讓List 轉 Map使用總結Java
- map遍歷知識總結
- STM32中斷相關知識總結