1. 程式人生 > 其它 >TreeSet的簡單介紹與使用方法

TreeSet的簡單介紹與使用方法

TreeSet是JAVA中集合的一種,TreeSet 是一個有序的集合,它的作用是提供有序的Set集合。它繼承於AbstractSet抽象類,實現了NavigableSet<E>,Cloneable,java.io.Serializable介面。

  一種基於TreeMapNavigableSet實現。

  因為TreeSet繼承了AbstractSet抽象類,所以它是一個set集合,可以被例項化,且具有set  的屬性和方法。

  TreeSet是基於TreeMap實現的。TreeSet中的元素支援2種排序方式:自然排序或者根據建立TreeSet 時提供的 Comparator 進行排序

。這取決於使用的構造方法。

  TreeSet的效能比HashSet差但是我們在需要排序的時候可以用TreeSet因為他是自然排序也就是升序下面是TreeSet實現程式碼這個類也似只能通過迭代器迭代元素

  ps:TreeSet是有序的Set集合,因此支援add、remove、get等方法。

1、TreeSet繼承於AbstractSet,並且實現了NavigableSet介面。
2、 TreeSet的本質是一個"有序的,並且沒有重複元素"的集合,它是通過TreeMap實現的。TreeSet中含有一個"NavigableMap型別的成員變數"m,而m實際上是"TreeMap的例項"。

1 import java.util.*;
2
3 /**
4 * @desc TreeSet的遍歷程式
5 *
6 * @author
7 * @email
8 */
9 public class TreeSetIteratorTest {
10
11 public static void main(String[] args) {
12 TreeSet set = new TreeSet();
13 set.add("aaa");
14 set.add("aaa");
15 set.add("bbb");
16 set.add("eee");
17 set.add("ddd");
18 set.add("ccc");
19
20 // 順序遍歷TreeSet
21 ascIteratorThroughIterator(set) ;
22 // 逆序遍歷TreeSet
23 descIteratorThroughIterator(set);
24 // 通過for-each遍歷TreeSet。不推薦!此方法需要先將Set轉換為陣列
25 foreachTreeSet(set);
26 }
27
28 // 順序遍歷TreeSet
29 public static void ascIteratorThroughIterator(TreeSet set) {
30 System.out.print("\n ---- Ascend Iterator ----\n");
31 for(Iterator iter = set.iterator(); iter.hasNext(); ) {


32 System.out.printf("asc : %s\n", iter.next());
33 }
34 }
35
36 // 逆序遍歷TreeSet
37 public static void descIteratorThroughIterator(TreeSet set) {
38 System.out.printf("\n ---- Descend Iterator ----\n");
39 for(Iterator iter = set.descendingIterator(); iter.hasNext(); )

40 System.out.printf("desc : %s\n", (String)iter.next());
41 }
42
43 // 通過for-each遍歷TreeSet。不推薦!此方法需要先將Set轉換為陣列
44 private static void foreachTreeSet(TreeSet set) {
45 System.out.printf("\n ---- For-each ----\n");
46 String[] arr = (String[])set.toArray(new String[0]);
47 for (String str:arr)
48 System.out.printf("for each : %s\n", str);
49 }
50 }