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()//將姓名和年齡以字符串的形式返回
{
returnname+","+age;
}
//出現重名時,再找到另一個hash地址用來存儲數據(底層自動調用)
publicinthashCode()
{
returnname.hashCode()+age*34;
}
//判斷接受的類是不是Person類,不是就拋出異常(底層自動調用)
publicbooleanequals(Object obj)
{
if(!(objinstanceofPerson))
thrownew ClassCastException("不是Person類");
Person p = (Person)obj;
returnthis.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(newPerson("zhangsan5",15),"nanjing");
map.put(newPerson("azhangsan5",10),"shanghai");
map.put(newPerson("zhangsan2",20),"haierbing");
map.put(newPerson("bzhangsan2",20),"beijing");
map.put(newPerson("zhangsan3",12),"shanghai");
map.put(newPerson("zhangsan4",19),"changchun");
map.put(newPerson("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接口;要么在集合中傳入自定義的比較器。
新聞熱點
疑難解答