好程式設計師Java培訓分享treeset和hashset的區別
好程式設計師Java 培訓分享 treeset 和 hashset 的區別 首先我們來說一下 HashSet 。
HashSet 有以下特點
不能保證元素的排列順序,順序有可能發生變化
不是同步的
集合元素可以是null, 但只能放入一個 null
當向HashSet 集合中存入一個元素時, HashSet 會呼叫該物件的 hashCode() 方法來得到該物件的 hashCode 值,然後根據 hashCode 值來決定該物件在 HashSet 中儲存位置。
簡單的說,HashSet 集合判斷兩個元素相等的標準是兩個物件透過 equals 方法比較相等,並且兩個物件的 hashCode() 方法返回值相等
注意,如果要把一個物件放入HashSet 中,重寫該物件對應類的 equals 方法,也應該重寫其 hashCode() 方法。其規則是如果兩個物件透過 equals 方法比較返回 true 時,其 hashCode 也應該相同。另外,物件中用作 equals 比較標準的屬性,都應該用來計算 hashCode 的值。
TreeSet 類
TreeSet 是 SortedSet 介面的唯一實現類, TreeSet 可以確保集合元素處於排序狀態。 TreeSet 支援兩種排序方式,自然排序和定製排序,其中自然排序為預設的排序方式。向 TreeSet 中加入的應該是同一個類的物件。
TreeSet 判斷兩個物件不相等的方式是兩個物件透過 equals 方法返回 false ,或者透過 CompareTo 方法比較沒有返回 0
自然排序
自然排序使用要排序元素的CompareTo ( Object obj )方法來比較元素之間大小關係,然後將元素按照升序排列。
Java 提供了一個 Comparable 介面,該介面裡定義了一個 compareTo(Object obj) 方法,該方法返回一個整數值,實現了該介面的物件就可以比較大小。
obj1.compareTo(obj2) 方法如果返回 0 ,則說明被比較的兩個物件相等,如果返回一個正數,則表明 obj1 大於 obj2 ,如果是負數,則表明 obj1 小於 obj2 。
如果我們將兩個物件的equals 方法總是返回 true ,則這兩個物件的 compareTo 方法返回應該返回 0
定製排序
自然排序是根據集合元素的大小,以升序排列,如果要定製排序,應該使用Comparator 介面,實現 int compare(T o1,T o2) 方法。
最重要:
1 、 TreeSet 是二差樹實現的 ,Treeset 中的資料是自動排好序的,不允許放入 null 值。
2 、 HashSet 是雜湊表實現的 ,HashSet 中的資料是無序的,可以放入 null ,但只能放入一個 null ,兩者中的值都不能重複,就如資料庫中唯一約束。
3 、 HashSet 要求放入的物件必須實現 HashCode() 方法,放入的物件,是以 hashcode 碼作為標識的,而具有相同內容的 String 物件, hashcode 是一樣,所以放入的內容不能重複。但是同一個類的物件可以放入不同的例項。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913864/viewspace-2735322/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 好程式設計師Java培訓分享Java和HTML的區別?程式設計師JavaHTML
- 好程式設計師Java培訓分享int和Integer的區別程式設計師Java
- 好程式設計師Java培訓分享Java EE與Java的區別程式設計師Java
- 好程式設計師Java培訓分享之RMI與RPC的區別程式設計師JavaRPC
- 好程式設計師Java培訓分享Java程式設計技巧程式設計師Java
- 好程式設計師Python培訓分享print和return的作用及區別程式設計師Python
- 好程式設計師Java培訓分享Java程式設計師技能提升指南程式設計師Java
- 好程式設計師Java培訓分享BigDecimal的用法程式設計師JavaDecimal
- 好程式設計師Java培訓分享maven-概述程式設計師JavaMaven
- 好程式設計師Java培訓分享Java程式設計師常用的工具類庫程式設計師Java
- 好程式設計師Java培訓分享如何快速入門Java程式設計程式設計師Java
- 好程式設計師Java培訓分享面試Java的注意事項程式設計師Java面試
- 好程式設計師Java培訓分享Java之反射技術程式設計師Java反射
- 好程式設計師Java培訓分享Java初學者必讀程式設計師Java
- 好程式設計師Java培訓分享Java多執行緒程式設計師Java執行緒
- 好程式設計師Java培訓分享Java包是什麼?程式設計師Java
- 好程式設計師Java培訓分享如何快速入門Java程式設計師Java
- 好程式設計師Java培訓分享20個Java程式設計師基礎題程式設計師Java
- 好程式設計師Java培訓分享Spring Ioc的原理程式設計師JavaSpring
- 好程式設計師Java培訓分享SpringBoot -YAML程式設計師JavaSpring BootYAML
- 好程式設計師Java培訓分享For迴圈詳解程式設計師Java
- 好程式設計師Java培訓分享Mybatis面試題集合程式設計師JavaMyBatis面試題
- 好程式設計師Java培訓分享本地快取如何設計程式設計師Java快取
- 好程式設計師Java培訓分享學Java程式設計要注意什麼程式設計師Java
- 好程式設計師Java培訓分享Java集合的兩種排序方法程式設計師Java排序
- 好程式設計師Java培訓分享Java面試題集合篇一程式設計師Java面試題
- 好程式設計師Java培訓分享Java面試題集合篇二程式設計師Java面試題
- 好程式設計師Java培訓分享面試Java要注意什麼程式設計師Java面試
- 好程式設計師Java培訓分享Java物件導向概念解析程式設計師Java物件
- 好程式設計師Java培訓分享Java中級面試題合集程式設計師Java面試題
- 好程式設計師Java培訓分享MySQL算術運算子程式設計師JavaMySql
- 好程式設計師Java培訓分享Java的三大框架怎麼學?程式設計師Java框架
- 好程式設計師Java培訓分享Java類載入的過程概述程式設計師Java
- 好程式設計師Java培訓分享Java基礎知識總結程式設計師Java
- 好程式設計師Java培訓分享Java效能常見命令有哪些程式設計師Java
- 好程式設計師Java培訓分享學Java需要什麼基礎?程式設計師Java
- 好程式設計師Java培訓分享學習Java需要哪些基礎程式設計師Java
- 好程式設計師Java培訓分享Java多執行緒併發程式設計師Java執行緒