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接口;要麼在集合中傳入自定義的比較器。