java集合TreeSet的兩種排序方式

2021-07-05 06:39:25 字數 3660 閱讀 5428

自然排序:①要求新增進treeset中的元素所在的類implements comparable介面

②重寫compareto(object obj),在此方法內指明按照元素的哪個屬性進行排序

③向treeset中新增元素即可。若不實現此介面,會報執行時異常

定製排序: ①建立乙個實現comparator介面的實現類的物件。在實現類中重寫comparator的compare(object                                         o1,object o2)方法

②在此compare()方法中指明按照元素所在類的哪個屬性進行排序

③將此實現comparator介面的實現類的物件作為形參傳遞給treeset的構造器中

④向treeset中新增元素即可。若不實現此介面,會報執行時異常

>要求重寫的compareto()或者compare()方法與equals()和hashcode()方法保持一致。

定義乙個employee類,

該類包含:private成員變數name,age,birthday,其中 birthday 為 mydate 類的物件;

並為每乙個屬性定義 getter, setter 方法;

並重寫 tostring 方法輸出 name, age, birthday

mydate類包含:

private成員變數month,day,year;並為每乙個屬性定義 getter, setter 方法;

分別按以下兩種方式對集合中的元素進行排序,並遍歷輸出:

1). 使employee實現comparable 介面,並按 name 排序

2). 建立treeset 時傳入 comparator物件,按生日日期的先後排序。

public class employee implements comparable

public void setname(string name)

public integer getage()

public void setage(integer age)

public mydate getbirthday()

public void setbirthday(mydate birthday)

public employee(string name, integer age, mydate mydate)

@override

public string tostring()

@override

public int compareto(object o)

return 0;

} @override

public int hashcode()

@override

public boolean equals(object obj) else if (!age.equals(other.age))

return false;

if (birthday == null) else if (!birthday.equals(other.birthday))

return false;

if (name == null) else if (!name.equals(other.name))

return false;

return true; }

}

public class mydate 

public void setmonth(int month)

public int getday()

public void setday(int day)

public int getyear()

public void setyear(int year)

public mydate(int month, int day, int year)

@override

public string tostring()

@override

public int hashcode()

@override

public boolean equals(object obj)

}

public class employee1 

public void setname(string name)

public integer getage()

public void setage(integer age)

public mydate getbirthday()

public void setbirthday(mydate birthday)

public employee1(string name, integer age, mydate mydate)

@override

public string tostring()

@override

public int hashcode()

@override

public boolean equals(object obj) else if (!age.equals(other.age))

return false;

if (birthday == null) else if (!birthday.equals(other.birthday))

return false;

if (name == null) else if (!name.equals(other.name))

return false;

return true; }

}

public class testemployee  else  else }}

return 0;}};

treeset set = new treeset(com);

employee1 e1 = new employee1("張三", 21, new mydate(3, 22, 1999));

employee1 e2 = new employee1("王三", 22, new mydate(4, 24, 1990));

employee1 e3 = new employee1("列兒科", 25, new mydate(4, 26, 1993));

employee1 e4 = new employee1("李四", 24, new mydate(2, 24, 1998));

employee1 e5 = new employee1("天肉", 23, new mydate(3, 23, 1995));

employee1 e6 = new employee1("天肉", 23, new mydate(3, 23, 1995));

set.add(e1);

set.add(e2);

set.add(e3);

set.add(e4);

set.add(e5);

set.add(e6);

iterator i = set.iterator();

while (i.hasnext()) }

//自然排序

@test

public void test1()

}}

集合框架 TreeSet集合

泛型就是一種不確定的資料型別,使用 字母 可以使用在類上,方法上和介面上。泛型類,指的是在類上有乙個確定的資料型別,在建立該類物件時確定其資料型別。表示一種不確定的資料型別 public class boxpublic void setelement e element 泛型類上的,在建立物件的時候...

AJPFX關於TreeSet集合的介紹

需求 鍵盤錄入5個學生資訊 姓名,語文成績,數學成績,英語成績 按照總分從高到低輸出到控制台。分析 1 建立鍵盤錄入物件 2 建立treeset集合,使用匿名內部類實現comparator介面,重寫compara方法 3 判斷集合中元素的個數,向其中新增元素 4 遍歷集合 class demo tr...

17 8 TreeSet集合和排序器

元素有序,可以按照一定的規則進行排序,具體排序方式取決於構造方法 沒有帶索引的方法,所以不能使用普通for迴圈遍歷 由於是set集合,所以不包含重複元素的集合 基本使用 public class treesetdemo 執行結果 使用步驟 用treeset集合儲存自定義物件,無參構造方法使用的是自然...