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)//重新設定姓名和年齡
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接口;要麼在集合中傳入自定義的比較器。


程式猿神奇的手,每時每刻,這雙手都在改變着世界的互動方式!
本文轉自當天真遇到現實部落格園部落格,原文連結:http://www.cnblogs.com/XYQ-208910/p/4710550.html,如需轉載請自行聯系原作者