TreeSet 儲存自訂類型時CompareTo 方法應該怎麼寫

來源:互聯網
上載者:User
import java.util.*;//用Comparable 實現自訂類型的排序class Person //implements Comparable{public String name;public int age;public Person (String name,int age){this.name=name;this.age=age;}public int  compareTo(Object obj){if(!(obj instanceof Person ))return 0;Person p=(Person)obj;if(this.age>p.age)return 1;elseif(this.age==p.age)  //這個判斷決定著該元素是否可以存進容器,另個兩個負責排序,所以,這個在主要比較條件相同的時候,還要判斷次比較條件{return this.name.compareTo(p.name);}elsereturn -1;}}//下面用Comparator 介面實現排序class Mycompare implements Comparator<Person>{public int compare(Person a,Person b){int num= (new Integer(a.age).compareTo(new Integer(b.age)));return num==0?a.name.compareTo(b.name):num;}}public class TreeSetTest {public static void main(String args[]){/*TreeSet treeset =new TreeSet();treeset.add(new Person ("boy",20));treeset.add(new Person ("girl",21));treeset.add(new Person ("person",16));treeset.add(new Person ("animal",20));  如果添加的是new Person ("animal",20);的話,這個值將不會被添加進去,因為定義的只是按年齡進行排序,而compareTo 裡面定義的如果年齡相同,返回的則是0,所以這是不正確的,compareTo 返回0的情況就相當於equals 方法,所以這個方法在寫的時候應該考慮全面,什麼樣的對象才算 相同的,一般在自訂類型排序的時候,在主要條件相同的時候,還要按次要條件進行排序for(Iterator it=treeset.iterator();it.hasNext();){Person p=(Person)it.next();System.out.println(p.name+"...."+p.age);}System.out.println(new Integer(1).compareTo(new Integer(3)));*/}}/* *   總結:  return -1; *          return 1;  這兩個只是負責排序,可以根據需要進行 *          return 0 這個傳回值是判斷這個元素是否可以添加進容器內,因此在書寫這個方法時要小心,不要看著兩個元素的比較元素相同就 *          盲目的 return 0 ,因為兩個元素的比較元素相同,但不代表著這兩個元素就是相同的,所以你還要判斷其非主要比較元素 *          如果 :對Person 類進行排序,如果 this.age==p.age 那麼就還要比較其name 如果 this.name= p.name 那麼這兩個元素才算得上相同, *          所以在this.age == p.age 有情況下,還要接著  return this.name.coompareTo (p.name)   *  *  *  *  * //-------------------------------------------------------------------------------------------//下面是用實現Comparator來排序的執行個體TreeSet <Person> treeset = new TreeSet<Person>(new Mycompare());treeset.add(new Person("boy",20));treeset.add(new Person ("girl",18));treeset.add(new Person ("Person",25));    treeset.add(new Person("man",18));for(Iterator<Person> it=treeset.iterator();it.hasNext();){Person p=it.next();System.out.println(p.name+"..."+p.age);}}}2011/10/27  18:38:21*/

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.