import java.util.*;
public class Person implements Comparable//使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 void sop(T t) //使用泛型接收參數
{
System.out.println(t);
}
public static void main(String args[]) throws Exception
{
//創建一個map集合,用來存儲數據 ?<>表示接收的是泛型,即指定的類型
TreeMap map = new TreeMap(/*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> entryset = map.entrySet();
//獲取迭代器
Iterator> it = entryset.iterator();
//用迭代器取數據
while(it.hasNext())
{
Map.Entry m = it.next();
Person key = m.getKey();//取出鍵
String value =m.getValue();//取出值
sop(key+"......."+"adress:"+value);//打印鍵和值
}
}
}
class Mycompare implements comparator//自定義一個比較器
{
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的屬性具有比較性
{privateString name;private intage;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()//獲取姓名
{returnname;
}public int getAge()//獲取年齡
{returnage;
}public String toString()//將姓名和年齡以字符串的形式返回
{return name+","+age;
}//出現重名時,再找到另一個hash地址用來存儲數據(底層自動調用)
public inthashCode()
{return name.hashCode()+age*34;
}//判斷接受的類是不是Person類,不是就拋出異常(底層自動調用)
publicboolean 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 classTest
{public static void sop(T t) //使用泛型接收參數
{
System.out.println(t);
}public static voidmain(String args[]) throws Exception
{//創建一個map集合,用來存儲數據 <>表示接收的是泛型,即指定的類型
TreeMap map = new TreeMap(/*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> entryset =map.entrySet();//獲取迭代器
Iterator> it =entryset.iterator();//用迭代器取數據
while(it.hasNext())
{
Map.Entry m =it.next();
Person key= m.getKey();//取出鍵
String value =m.getValue();//取出值
sop(key+"......."+"adress:"+value);//打印鍵和值
}
}
}class Mycompare implements comparator//自定義一個比較器
{public intcompare(Person p1,Person p2)
{int num =p1.getName().compareTo(p2.getName());return num==0?new Integer(p1.getAge()).compareTo(newInteger(p2.getAge())):num;
}
}//注意:上面的兩種形式都實現了比較,任選其中一種就可以。要么實現comparable接口;要么在集合中傳入自定義的比較器。