1. 程式人生 > >java日常學習:TreeSet

java日常學習:TreeSet

java程式碼塊

TreeSet

集合系統:
———–| Collection 單列集合的根介面
—————-| List 如果是實現了List介面的集合類,具備的特點:有序,元素可重複。
——————–| ArrayList 底層是使用了一個Object陣列實現的, 特點:查詢速度快,增刪速度慢。
——————–| LinkedList 底層是使用了連結串列資料結構實現的,特點:查詢速度慢, 增刪快。
——————–| Vector(瞭解) Vector 底層也是使用了Object陣列實現的, 是執行緒安全的,操作效率低。
—————-| Set 如果是實現了Set介面的集合類, 具備的特點: 無序,元素不可重複。
——————–| HashSet 底層是使用了一個雜湊表實現的,特點: 存取速度快。
——————–| TreeSet 底層是使用了紅黑樹(二叉樹)資料結構實現 , 特點:可以對元素進行排序儲存。

TreeSet 要注意的事項:
1. 如果往TreeSet新增元素的時候,如果元素本身具備自然順序的特性,那麼treeSet就會按照元素自然順序的特性進行排序儲存。
2. 如果往TreeSet新增元素的時候, 如果元素本身不具備自然順序的特性, 那麼元素所屬的類就必須要實現Comparable介面,把元素的比較規則定義在compareTo(T o)方法上。
3. 在TreeSet中如果比較的方法返回的是0,該元素則被視為重複元素,不允許新增。
4. 往TreeSet新增元素的時候,如果元素本身不具備自然順序的特性,而且元素所屬的類沒有實現Comparable介面,那麼在建立TreeSet物件 的時候就必須要傳入一個比較器物件。

TreeSet 要注意的事項:
1. 往TreeSet新增元素的時候,如果元素本身具備自然順序的特性,那麼treeSet就會按照元素自然順序的特性進行排序儲存。
2. 往TreeSet新增元素的時候, 如果元素本身不具備自然順序的特性, 那麼元素所屬的類就必須要實現Comparable介面,把元素的比較規則定義在compareTo(T o)方法上。
3. 往TreeSet新增元素的時候,如果元素本身不具備自然順序的特性,而且元素所屬的類沒有實現Comparable介面,那麼在建立TreeSet物件 的時候就必須要傳入一個比較器物件。
4. 如果元素已經實現了Comparable介面,當時建立TreeSet物件的時候又傳入了比較器物件,那麼比較規則優先使用比較器的。

推薦使用: 比較器。

疑問:如何建立一個比較器物件:

比較器的建立格式:

    class 類名   implements  Comparator{

    }

練習一

//比較器的使用
class Emp implements Comparable {

    String name;

    int age;

    double salary;

    public Emp(String name, int age, double salary) {
        this.name = name;
        this.age = age;
        this.salary = salary;
    }

    @Override
    public String toString() {
        return "{ 姓名:"+ this.name+" 年齡:"+ this.age+ " 薪水:"+this.salary+"}";
    }

    /*
     * 元素與元素之間的比較規則定義在COmparaTo方法上。(non-Javadoc)
        返回值:負整數、零或正整數,根據此物件是小於、等於還是大於指定物件。 

     */
    @Override  //  100.52 - 100.32 = 0.2
    public int compareTo(Emp e) {
        return (int)((this.salary-e.salary)*100);
    }
}

//自定義一個比較器類
class AgeComparator implements Comparator<Emp>{

    @Override
    public int compare(Emp o1, Emp o2) {
        return o1.age-o2.age;
    }
}


public class Demo1 {

    public static void main(String[] args) {
        //建立一個比較器物件
        AgeComparator ageComparator = new AgeComparator();

        TreeSet tree = new TreeSet(ageComparator);
        tree.add(new Emp("大毛",6,200));
        tree.add(new Emp("小毛",5,100));    
        tree.add(new Emp("二狗",8,300));
        tree.add(new Emp("狗子",3,500));

        System.out.println(tree);
    }

}

練習二

//例如String str="8 10 25 5 3 7";  要求使用TreeSet物件把字串拼接成如下格式:  "3 5 7 8 10 25" 

package day05_test;

import java.util.Iterator;
import java.util.TreeSet;

public class Demo5 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String string = "8 10 25 5 3 7";
        System.out.println("排序後的字串是:" + sortString(string));
    }

    public static String sortString(String str) {
        TreeSet treeSet = new TreeSet();
        String[] datas = str.split(" ");

        for (int i = 0; i < datas.length; i++) {
            int num = Integer.parseInt(datas[i]);
            treeSet.add(num);
        }

        StringBuilder stringBuilder = new StringBuilder();
        Iterator iterator = treeSet.iterator();
        while (iterator.hasNext()) {
            stringBuilder.append(iterator.next() + " ");
        }
        return stringBuilder.toString();

    }
}

用於平時自己複習回顧,如有錯誤,歡迎指正

個人微訊號:yxx85561498,歡迎一起學習交流,努力進步