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