Hashset和Treeset的區別

Set中元素不可以重複,是無序的(這裏的無序是指存入元素的先後順序與輸出元素的先後順序不一致)

HashSet:

  ①內部的數據結構是哈希表,是線程不安全的。

  ②HashSet中保證集合中元素是唯一的方法:通過對象的hashCode和equals方法來完成對象唯一性的判斷。如果對象的hashCode值不同則不用判斷equals方法,就直接存到HashSet中

  注意:如果元素要存到HashSet中,必須覆蓋hashCode方法和equals方法。

  ③HashSet是哈希表實現的,HashSet中的元素是無序的。集合元素可以是null,但只能放入一個null。

  HashSet要求放入的對象必須實現HashCode()方法,放入的對象是以hashcode碼作爲標識的,而具有相同內容的String對象,HashCode是一樣的,所以放入的內容不能重複。但是同一個類的對象可以放入不同的實例。

TreeSet:

  TreeSet是SortedSet接口的唯一實現類,TreeSet可以保證集合元素處於排序狀態。TreeSet支持兩種排序方式,自然排序和定製排序,其中自然排序是默認的排序方式,想TreeSet中加入的對象應該是同一個類的對象。

  ①可以對Set集合中的元素進行排序,是線程不安全的。

  ②TreeSet判斷元素唯一性的方法是:根據比較方法的返回結果是否爲0,如果是0,則是相同元素,如果不是0,是不同元素,存儲。

  ③TreeSet對元素進行排序的方式:元素自身具備比較的功能,即自然排序,需要實現Comparable接口,並覆蓋其compareTo方法。元素本身不具備比較功能的,則需要實現Comparator,並覆蓋其compare方法(定製排序)。

  ④TreeSet是二叉樹實現的,TreeSet中的數據是自動排好順序的,不允許放入null值

總結:HashSet存放對象的時候判斷對象是否相等,是根據對象的hashCode和equals方法。TreeSet存放對象時,是根據對象的compareTo方法比較兩個對象是否相等,並進行比較。

Hashset和Treeset的使用場景

HashSet:哈希表是通過使用稱爲散列法的機制來存儲信息的,元素並沒有以某種特定的順序來存放。

TreeSet:提供一個使用樹結構存儲set接口的實現(紅黑樹算法)。對象以升序順序存儲,訪問和遍歷的時間很快。 

使用場景:HashSet是基於Hash算法實現的,其性能通常都優於TreeSet。我們通常都應該使用HashSet,在我們需要排序的功能時,我們才使用TreeSet。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章