集合框架--Map集合之TreeMap存储自定义对象

来源:互联网 发布:鲁迅名言 知乎 编辑:程序博客网 时间:2024/05/28 04:55

用TreeMap按姓名进行排序:

import java.util.TreeMap;import java.util.Iterator;import java.util.Set;import java.util.Comparator;import java.util.Map;class Student {  String name;int age;public Student(String name,int age){super();this.name=name;this.age=age;}public String getName(){return name;}public void setName(String name){this.name=name;}public int getAge(){return age;}public void setAge(int age){this.age=age;}public int hashCode(){  //复写hashCode()return name.hashCode()+age;}public boolean equals(Object obj){  //复写equalsif(this==obj) return true;if(!(obj instanceof Student))  throw new ClassCastException("类型错误");  //输入类型错误Student s = (Student)obj;//强制转换return this.name.equals(s.name) && this.age==s.age;  //说明姓名和年龄相同则为同一元素} }class  ComparatorByName implements Comparator{  //按姓名比较,继承Comparator接口public int compare(Object o1,Object o2){Student s1=(Student)o1;Student s2=(Student)o2;int temp=s1.getName().compareTo(s2.getName());return temp==0?s1.getAge()-s2.getAge():temp;}}public class TreeMapDemo{public static void main(String[] args){TreeMap<Student,String> tm=new TreeMap<Student,String>(new ComparatorByName());tm.put(new Student("lisi",38),"北京");tm.put(new Student("zhaosi",34),"上海");tm.put(new Student("xiaoqiang",31),"沈阳");tm.put(new Student("wangcai",28),"大连");tm.put(new Student("zhaosi",34),"铁岭");Iterator<Map.Entry<Student,String>> it=tm.entrySet().iterator();while(it.hasNext()){Map.Entry<Student,String> me=it.next();Student key=me.getKey();String value=me.getValue();System.out.println(key.getName()+":"+key.getAge()+"..."+value);}}}
运行结果:

0 0