- /*
- 每一个学生都有对应的归属地。
- 学生Student,地址String。
- 学生属性:姓名,年龄。
- 注意:姓名和年龄相同的视为同一个学生。
- 保证学生的唯一性。
- 1,描述学生。
- 定义一个类,通过构造函数描述学生的姓名和年龄
- 2,定义map容器。将学生作为键,地址作为值。存入。
- 使用HashMap将学生作为键存入,地址作为值存入
- 3,获取map集合中的元素。
- 建立Set获取map中键,然后调用方法获取值即可
- @author 张振纲
- */
- import java.util.*;
- class Student implements Comparable<Student>
- {
- private String name;
- private int age;
- Student(String name,int age)
- {
- this.name = name;
- this.age = age;
- }
- public int hashcode()
- {
- return name.hashCode()+age*34;
- }
- public int compareTo(Student stu)
- {
- return new Integer (this.age) .compareTo( new Integer (stu.age));
- }
- public boolean equals(Object obj)
- {
- if (!(obj instanceof Student))
- {
- throw new RuntimeException("类型不匹配");
- }
- Student s = (Student)obj;
- return this.name.equals(s.name)&&this.age==s.age;
- }
- public String getName()
- {
- return name;
- }
- public int getAge()
- {
- return age;
- }
- }
- class MapTest
- {
- public static void main(String[] args)
- {
- HashMap<Student,String> map = new HashMap<Student,String>(); //将学生作为键存入,将地址作为值存入
- map.put(new Student("zhangsan1",17),"beijing");
- map.put(new Student("zhangsan2",14),"tianjing");
- map.put(new Student("zhangsan5",14),"tianjing");
- map.put(new Student("zhangsan3",11),"nanjing");
- map.put(new Student("zhangsan4",16),"datong");
- map.put(new Student("zhangsan4",16),"datong");
- Set<Student> s = map.keySet();
- Iterator<Student> it = s.iterator();
- while (it.hasNext())
- {
- Student stu = it.next();
- System.out.println(stu.getName()+"---"+stu.getAge()+"----"+map.get(stu));
- }
- }
- }
复制代码 以上这段代码需求的写很清楚
思路我也标明了
我想通过TreeMap存入数据,并且按年龄排序
我复写了Comparable的compareTo方法,使对象自身具备比较性
可是为什么现在按年龄排序了,但是不会排除重复元素
到底该怎么做,求指导 |