如何在Java中向TreeSet新增自定義類物件?
TreeSet是Java集合框架的一個類,它實現了SortedSet介面。請記住,它以升序儲存元素,並且不允許重複值。在向TreeSet新增自定義類物件時,我們需要堅持這個條件,否則會遇到ClassCastException異常。這裡,自定義類物件是指使用建構函式建立的使用者定義的物件。
向TreeSet新增自定義類物件的程式
在上一節中,我們討論瞭如果我們沒有遵循TreeSet的條件,將會得到ClassCastException異常。為了避免這種情況,我們需要實現Comparable介面。讓我們快速討論一下這個介面。
Comparable介面
當我們想要根據其自然順序對自定義物件進行排序時,此介面非常有用。例如,它按字典順序對字串進行排序,按數字順序對數字進行排序。此介面位於“java.lang”包中。通常,預設情況下可以使用此包中定義的類和介面,因此無需顯式匯入此包。
語法
class nameOfclass implements Comparable<nameOfclass>
這裡,class是建立類的關鍵字,implements是啟用介面提供的功能的關鍵字。
compareTo()
Comparable介面只定義了一個名為“compareTo”的方法,可以重寫該方法以對物件集合進行排序。它賦予了比較一個類物件與自身的能力。當“this”物件等於傳入的物件時,它返回0;如果“this”物件大於傳入的物件,則返回正值;否則返回負值。
語法
compareTo(nameOfclass nameOfobject);
方法一
首先,匯入“java.util”包,以便我們可以使用TreeSet。
建立一個實現Comparable介面的類“Cart”。在其中,宣告兩個變數,並定義該類的建構函式以及兩個引數“item”和“price”,型別分別為字串和整數。
定義“compareTo”方法以及作為引數的類“Cart”的物件,以比較“this”物件與新建立的物件。
現在,在main()方法中,宣告一個名為“trSet”的類“Cart”物件,其集合型別為TreeSet,並使用名為“add()”的內建方法將物件詳細資訊儲存到集合中。
最後,使用for each迴圈列印TreeSet的物件。
示例
以下示例說明了如何將自定義類物件新增到TreeSet。
import java.util.*; public class Cart implements Comparable <Cart> { String item; int price; Cart(String item, int price) { // constructor // this keyword shows these variables belong to constructor this.item = item; this.price = price; } // overriding method public int compareTo(Cart comp) { if(this.price > comp.price) { // performing comparison return 1; } else { return -1; } } public static void main(String[] args) { // Declaring collection TreeSet TreeSet <Cart> trSet = new TreeSet <Cart>(); // Adding object to the collection trSet.add(new Cart("Rice", 59)); trSet.add(new Cart("Milk", 60)); trSet.add(new Cart("Bread", 45)); trSet.add(new Cart("Peanut", 230)); trSet.add(new Cart("Butter", 55)); // to print the objects for (Cart print : trSet) { System.out.println("Item: " + print.item + ", " + "Price: " + print.price); } } }
輸出
Item: Bread, Price: 45 Item: Butter, Price: 55 Item: Rice, Price: 59 Item: Milk, Price: 60 Item: Peanut, Price: 230
結論
我們從介紹實現SortedSet介面的TreeSet類開始這篇文章。在下一節中,我們瞭解了Comparable介面及其內建方法“compareTo()”。因為TreeSet集合只接受可比較的物件,所以它們是必需的。最後,我們討論了一個Java程式,用於將自定義類物件新增到TreeSet。