天天看點

TreeSet 集合存儲的是自定義類型 需要注意什麼?

作者:夢幻随風的網際網路筆記

TreeSet 如果集合存儲的是自定義類型,當存入自定義的引用類型的時候就必須考慮到元素要求具有可排序性,不然會引發ClassCastException異常

TreeSet底層是二叉樹,可以對對象元素進行排序,但是自定義類需要實作comparable接口,重寫comparaTo() 方法。

TreeSet 可以儲存對象元素的唯一性(并不是一定保證唯一性,需要根據重寫的compaaTo方法來确定)

TreeSet 集合存儲的是自定義類型 需要注意什麼?

集合結構

public class TreeSetCompareDemo {

    public static void main(String[] args) {

        Book book1 = new Book(1, "紅樓夢", "曹雪芹",11.0);
        Book book2 = new Book(2, "西遊記", "曹雪芹",13.0);
        Book book3 = new Book(3, "水浒傳", "曹雪芹",12.0);



        BookNoCompare one = new BookNoCompare(3, "水浒傳", "曹雪芹",12.0);
        BookNoCompare two = new BookNoCompare(30, "水浒傳2", "曹雪芹",122.0);

        /*
        如果集合存儲的是自定義類型,當存入自定義的引用類型的時候就必須考慮到元素要求具有可排序性,
        不然會引發ClassCastException異常,
        是以要對自定義類型進行處理,必須要實作 Comparable或Compared接口
        */
        TreeSet treeSet = new TreeSet();
        treeSet.add(book1);
        treeSet.add(book2);
        treeSet.add(book3);
        for (Object object : treeSet) {
            Book book = (Book)object;
            System.out.println(book.getBookName() + book.getPrice());
        }



        TreeSet treeSet2 = new TreeSet();
        treeSet2.add(one);
        treeSet2.add(two);

    }
}           
TreeSet 集合存儲的是自定義類型 需要注意什麼?

error: 沒有實作 comparable接口

TreeSet 集合存儲的是自定義類型 需要注意什麼?

正确的寫法:

TreeSet 集合存儲的是自定義類型 需要注意什麼?

要對自定義類型進行處理,必須要實作 Comparable或Compared接口