Java特殊數據結構-TreeSet


資料來源
  1. TreeSet自然排序與比較器排序精講  https://blog.csdn.net/xiaofei__/article/details/53138681
  2. TreeSet概念以及遍歷方法  https://www.cnblogs.com/Tony-cheen/p/5681831.html
 
1.TreeSet簡介
  • TreeSet是JAVA中集合的一種有序集合,它的作用是提供有序的Set集合。它繼承於AbstractSet抽象類,實現了NavigableSet<E>,Cloneable,java.io.Serializable接口。
  • 因為TreeSet繼承了AbstractSet抽象類,所以它是一個set集合,可以被實例化,且具有set的屬性和add、remove、get等方法。
  • TreeSet是基於TreeMap實現的。TreeSet中的元素支持2種排序方式:自然排序和比較器排序。
  • TreeSet的性能比HashSet差,簡單比較:HashSet使用散列表進行存儲,元素無序,元素允許為null。TreeSet是使用樹結構來進行存儲,元素按字符串順序排序存儲,元素不允許為null。
 
  TreeSet繼承關系
java.lang.Object
↳ java.util.AbstractCollection<E>
↳ java.util.AbstractSet<E>
↳ java.util.TreeSet<E>
public class TreeSet<E> extends AbstractSet<E> implements NavigableSet<E>, Cloneable, java.io.Serializable{}
1、TreeSet繼承於AbstractSet,並且實現了NavigableSet接口。
2、TreeSet的本質是一個"有序的,並且沒有重復元素"的集合,它是通過TreeMap實現的。TreeSet中含有一個"NavigableMap類型的成員變量"m,而m實際上是"TreeMap的實例"。
 
2.TreeSet自然排序和比較器排序
 
    使用方式
  • a.自然順序(Comparable)
    • TreeSet類的add()方法中會把存入的對象提升為Comparable類型
    • 調用對象的compareTo()方法和集合中的對象比較
    • 根據compareTo()方法返回的結果進行存儲
  • b.比較器順序(Comparator)
    • 創建TreeSet的時候可以制定 一個Comparator
    • 如果傳入了Comparator的子類對象, 那么TreeSet就會按照比較器中的順序排序
    • add()方法內部會自動調用Comparator接口中compare()方法排序
    • 調用的對象是compare方法的第一個參數,集合中的對象是compare方法的第二個參數
  • c.兩種方式的區別
    • TreeSet構造函數什么都不傳, 默認按照類中Comparable的順序(沒有就報錯ClassCastException)
    • TreeSet如果傳入Comparator, 就優先按照Comparator
    TreeSet自然排序與比較器排序精講  https://blog.csdn.net/xiaofei__/article/details/53138681
 
3.TreeSet迭代方式和方法詳解
  • TreeSet的遍歷方式
1.TreeSet順序遍歷
for(Iterator iter = set.iterator(); iter.hasNext(); ) {
    iter.next();
}
2.Iterator順序遍歷
// 假設set是TreeSet對象
for(Iterator iter = set.descendingIterator(); iter.hasNext(); ) {
  iter.next();
}
3.for-each遍歷HashSet
// 假設set是TreeSet對象,並且set中元素是String類型
String[] arr = (String[])set.toArray(new String[0]);
for (String str:arr)
System.out.printf("for each : %s\n", str);
  • TreeSet 的構造函數

序號
構造函數的說明
1
TreeSet ()
此構造函數構造空樹集,將在根據其元素的自然順序按升序排序。
2
TreeSet (集合 c)
此構造函數生成樹的集合,它包含的元素的集合 c。
3
TreeSet (比較器 comp)
此構造函數構造一個空樹集,將根據給定的比較器進行排序。
4
TreeSet (SortedSet ss)
此構造函數生成包含給定 SortedSet 的元素 TreeSet
  • TreeSet的方法總結

修飾符和類型
方法和描述
boolean
add(E e)
將指定的元素添加到這套,如果它已不存在。
boolean
addAll(Collection<? extends E> c)
在加入這一組指定的集合中添加的所有元素。
E
ceiling(E e)
返回最小的元素在這一組大於或等於給定的元素,則null如果沒有這樣的元素。
void
clear()
從這一組中移除所有元素。
Object
clone()
返回此TreeSet實例淺表副本。
Comparator<? super E>
comparator()
返回用於排序在這集,或空元素,如果這套使用自然排序其元素的比較。
boolean
contains(Object o)
如果此集合包含指定的元素,則返回true 。
Iterator<E>
descendingIterator()
返回迭代器中這套降序排序的元素。
NavigableSet<E>
descendingSet()
返回逆序視圖中包含的元素這一套。
E
first()
返回第一個 (最低) 元素當前在這一套。
E
floor(E e)
返回的最大元素在這一組小於或等於null如果沒有這樣的元素。
SortedSet<E>
headSet(E toElement)
返回其元素是嚴格小於toElement這套的部分視圖.
NavigableSet<E>
headSet(E toElement, boolean inclusive)
返回一個視圖的這部分設置的元素都小於 (或等於,如果inclusive是真的) toElement.
E
higher(E e)
返回最小的元素在這套嚴格大於給定的元素,則null如果沒有這樣的元素。
boolean
isEmpty()
如果此集不包含任何元素,則返回true 。
Iterator<E>
iterator()
返回迭代器中這套以升序排序的元素。
E
last()
在這套目前返回的最后一個 (最高) 的元素。
E
lower(E e)
在這一套嚴格的小於給定的元素,則null返回的最大元素,如果沒有這樣的元素。
E
pollFirst()
檢索和刪除第一個 (最低) 元素,或如果此集合為空,則返回null 。
E
pollLast()
檢索和刪除的最后一個 (最高) 的元素,或如果此集合為空,則返回null 。
boolean
remove(Object o)
從這一組中移除指定的元素,如果它存在。
int
size()
在這套 (其基數) 中返回的元素的數目。
NavigableSet<E>
subSet(E fromElement, boolean fromInclusive, E toElement, boolean toInclusive)
返回此集的部分視圖的元素范圍從fromElement到toElement.
SortedSet<E>
subSet(E fromElement, E toElement)
返回視圖的部分的這一套的元素范圍從fromElement,具有包容性,到toElement,獨家。
SortedSet<E>
tailSet(E fromElement)
返回其元素是大於或等於fromElement這套的部分視圖.
NavigableSet<E>
tailSet(E fromElement, boolean inclusive)
返回其元素是大於 (或等於,如果inclusive是真的) 這套的部分視圖fromElement.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM