1. 程式人生 > >java 集合之TreeSet的用法

java 集合之TreeSet的用法

  Java中 TreeMap和TreeSet算是java集合類裡面比較有難度的資料結構。和普通的HashMap不一樣,普通的HashMap元素存取的時間複雜度一般是O(1)的範圍,而TreeMap內部對元素的操作複雜度為O(logn)。

        雖然在元素的存取方面TreeMap並不佔優,但是它內部的元素都是排序的,當需要查詢某些元素以及順序輸出元素的時候它能夠帶來比較理想的結果。可以說,TreeMap是一個內部元素排序版的HashMap。同樣,TreeSet是一個封裝了一個HashSet的成員變數來實現的,底層運用了紅黑樹的資料結構。

這裡主要展現TreeSet的兩種常用方法:

其中em2例子中的Comparable介面用法很重要;

em1:

public class TreeSetTest {  
    public static void main(String[] args) {  
        Set<String> set = new TreeSet<String>();  
        set.add("abc");  
        set.add("xyz");  
        set.add("rst");  
          
        System.out.println(set);//可以直接輸出  
          
        Iterator itSet = set.iterator();//也可以遍歷輸出  
        while(itSet.hasNext())  
            System.out.print(itSet.next() + "\t");  
        System.out.println();  
    }  
}  
輸出結果為:
[abc, rst, xyz]  
abc rst xyz  

em2:
//自定義資料型別,並在自定義的資料型別中實現CompareTo方法    
class Teacher implements Comparable {    
    int num;    
    String name;    
    
    Teacher(String name, int num) {    
        this.num = num;    
        this.name = name;    
    }    
    
    public String toString() {    
        return "學號:" + num + " 姓名:" + name;    
    }    
   
//按照num屬性先排一次序,如果num的值相同時再按照name屬性的字母順序進行排序; public int compareTo(Object o) { Teacher ss = (Teacher) o; int result = num > ss.num ? 1 : (num == ss.num ? 0 : -1); if (result == 0) { result = name.compareTo(ss.name); } return result; } } public class TreeSetTest { public static void main(String[] args) { Set<Teacher> treeSet = new TreeSet<Teacher>(); treeSet.add(new Teacher("zhangsan", 2)); treeSet.add(new Teacher("lisi", 1)); treeSet.add(new Teacher("wangwu", 3)); treeSet.add(new Teacher("mazi", 3)); //向TreeSet中新增的元素必須是同一類 System.out.println(treeSet);//直接輸出 Iterator itTSet = treeSet.iterator();//遍歷輸出 while(itTSet.hasNext()) System.out.print(itTSet.next() + "\t"); System.out.println(); } }
輸出結果為:

[學號:1 姓名:lisi, 學號:2 姓名:zhangsan, 學號:3 姓名:mazi, 學號:3 姓名:wangwu]  
學號:1 姓名:lisi    學號:2 姓名:zhangsan    學號:3 姓名:mazi    學號:3 姓名:wangwu