java://Comparator、Comparable的用法(按照要求將map集合的鍵值對進行順序輸出)

import java.util.*;java

public class Person implements Comparable<Person>//使Person的屬性具備比較性函數

{this

      private String name;spa

      private int age;code

      public Person(String name,int age)//初始化構造函數blog

      {接口

            this.name = name;字符串

            this.age = age;get

      }hash

      public void set(String name,int age)//從新設置姓名和年齡

      {

            this.name = name;

            this.age = age;

      }

      public String getName()//獲取姓名

      {

            return name;

      }

 

      public int getAge()//獲取年齡

     {

           return age;

     }

     public String toString()//將姓名和年齡以字符串的形式返回

     {

         return name+","+age;

     }

    //出現重名時,再找到另外一個hash地址用來存儲數據(底層自動調用)

     public int hashCode()

     {

        return name.hashCode()+age*34;

     }

     //判斷接受的類是否是Person類,不是就拋出異常(底層自動調用)

     public boolean equals(Object obj) 

     {

     if(!(obj instanceof Person))

                  throw new ClassCastException("不是Person類");

     Person p = (Person)obj;

     return this.name.equals(p.name) && this.age==p.age;

    }

    public int compareTo(Person p)//(按照本身的要求去做比較)

    {

      int num=new Integer(this.age).compareTo(p.age);

      return num==0?this.name.compareTo(p.name):num;

    }

}

public class Test

{

    public static <T>void sop(T t) //使用泛型接收參數

    {

          System.out.println(t);

    }

    public static void main(String args[]) throws Exception

    {

       //建立一個map集合,用來存儲數據  <>表示接收的是泛型,即指定的類型

       TreeMap<Person,String> map = new TreeMap<Person,String>(/*new Mycompare()*/); //也能夠使用這個被註釋掉的自定義的比較器

       //往集合添加數據

       map.put(new Person("czhangsan1",11),"beijing");

       map.put(new Person("zhangsan5",15),"nanjing");

       map.put(new Person("azhangsan5",10),"shanghai");

       map.put(new Person("zhangsan2",20),"haierbing");

       map.put(new Person("bzhangsan2",20),"beijing");

       map.put(new Person("zhangsan3",12),"shanghai");

       map.put(new Person("zhangsan4",19),"changchun");

       map.put(new Person("zhangsan4",10),"changchun");

       map.put(new Person("zhangsan4",10),"zhengzhou");

           //將map集合轉換爲set集合,由於map集合沒有迭代器  ,而set集合有         

           Set<Map.Entry<Person,String>> entryset = map.entrySet();

       //獲取迭代器

       Iterator<Map.Entry<Person,String>> it = entryset.iterator();          

       //用迭代器取數據

       while(it.hasNext())

        {

               Map.Entry<Person,String> m = it.next();

               Person key = m.getKey();//取出鍵

               String value =m.getValue();//取出值

               sop(key+"......."+"adress:"+value);//打印鍵和值

            }

     }

 } 

class Mycompare implements comparator<Perosn>//自定義一個比較器

{

    public int compare(Person p1,Person p2)

    {

        int num = p1.getName().compareTo(p2.getName());

        return num==0?new Integer(p1.getAge()).compareTo(new Integer(p2.getAge())):num;

    }

}

//注意:上面的兩種形式都實現了比較,任選其中一種就能夠。要麼實現comparable接口;要麼在集合中傳入自定義的比較器。

 

import java.util.*;
public class Person implements Comparable<Person>//使Person的屬性具備比較性
{
      private String name;
      private int age;
      public Person(String name,int age)//初始化構造函數
      {
            this.name = name;
            this.age = age;
      }
      public void set(String name,int age)//從新設置姓名和年齡
      {
            this.name = name;
            this.age = age;
      }

     public String getName()//獲取姓名
     {
           return name;
     }
     public int getAge()//獲取年齡
     {
           return age;
     }
     public String toString()//將姓名和年齡以字符串的形式返回
     {
         return name+","+age;
     }

    //出現重名時,再找到另外一個hash地址用來存儲數據(底層自動調用)
     public int hashCode()
     {
        return name.hashCode()+age*34;
     }

     //判斷接受的類是否是Person類,不是就拋出異常(底層自動調用)
     public boolean equals(Object obj) 
     {
         if(!(obj instanceof Person))
                  throw new ClassCastException("不是Person類");
         Person p = (Person)obj;
         return this.name.equals(p.name) && this.age==p.age;
    }

    public int compareTo(Person p)//(按照本身的要求去做比較)
    {
      int num=new Integer(this.age).compareTo(p.age);
      return num==0?this.name.compareTo(p.name):num;
    }
}

public class Test
{
    public static <T>void sop(T t) //使用泛型接收參數
    {
          System.out.println(t);
    }
    public static void main(String args[]) throws Exception
    {
       //建立一個map集合,用來存儲數據  <>表示接收的是泛型,即指定的類型
       TreeMap<Person,String> map = new TreeMap<Person,String>(/*new Mycompare()*/); //也能夠使用這個被註釋掉的自定義的比較器

       //往集合添加數據
       map.put(new Person("czhangsan1",11),"beijing");
       map.put(new Person("zhangsan5",15),"nanjing");
       map.put(new Person("azhangsan5",10),"shanghai");
       map.put(new Person("zhangsan2",20),"haierbing");
       map.put(new Person("bzhangsan2",20),"beijing");
       map.put(new Person("zhangsan3",12),"shanghai");
       map.put(new Person("zhangsan4",19),"changchun");
       map.put(new Person("zhangsan4",10),"changchun");
       map.put(new Person("zhangsan4",10),"zhengzhou");

       //將map集合轉換爲set集合,由於map集合沒有迭代器  ,而set集合有         
       Set<Map.Entry<Person,String>> entryset = map.entrySet();

       //獲取迭代器
       Iterator<Map.Entry<Person,String>> it = entryset.iterator();          

       //用迭代器取數據
       while(it.hasNext())
        {
               Map.Entry<Person,String> m = it.next();
               Person key = m.getKey();//取出鍵
               String value =m.getValue();//取出值
               sop(key+"......."+"adress:"+value);//打印鍵和值
            }
     }
 } 

class Mycompare implements comparator<Perosn>//自定義一個比較器
{
    public int compare(Person p1,Person p2)
    {
        int num = p1.getName().compareTo(p2.getName());
        return num==0?new Integer(p1.getAge()).compareTo(new Integer(p2.getAge())):num;
    }
}

//注意:上面的兩種形式都實現了比較,任選其中一種就能夠。要麼實現comparable接口;要麼在集合中傳入自定義的比較器。
 
相關文章
相關標籤/搜索