代码训练营——TreeMap

本文介绍了一种使用Java实现的学生对象年龄升序排序的方法。通过自定义Student类并实现Comparable接口来比较年龄,若年龄相同则按姓名排序。示例中运用了TreeMap集合存储学生数据,最终实现了对学生年龄的有效排序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求:对学生对象的年龄进行升序排序
因为数据是以键值对形式存在的。所以要使用
可以排序的Map集合。TreeMap。

import java.util.*;
class MapTest2
{
    public static void main(String[] args)
    {
        TreeMap<Student,String>tm = new TreeMap<Student,String>();
        tm.put(new Student("lisi3",23),"nanjing");
        tm.put(new Student("lisi1",21),"beijing");
        tm.put(new Student("lisi4",24),"wuhan");
        tm.put(new Student("lisi2",22),"shanghai");

        Set<Map.Entry<Student,String>>entrySet= tm.entrySet();
        Iterator<Map.Entry<Student,String>> it = entrySet.iterator();
        while(it.hasNext())
        {
            Map.Entry<Student,String> me = it.next();
            Student stu = me.getKey();
            String addr = me.getValue();
            System.out.println(stu+"::"+addr);

        }

    }
}
class Student implements Comparable<Student>
{
    private String name;
    private int age;
    Student(String name,int age)
    {
        this.name = name;
        this.age = age;
    }
    public int compareTo(Student s)
    {
        int num = new Integer(this.age).compareTo(new Integer(s.age));
        if(num==0)
            return this.name.compareTo(s.name);
        return num;
    }
    public int hashCode()
    {
        return this.name.hashCode()+age*34;
    }

    public boolean equals(Object obj)
    {
        if(!(obj instanceof Student))
        {
            throw new ClassCastException("类型不匹配");
        }
        Student s = (Student)obj;
        return this.name.equals(s.name)&&this.age==s.age;
    }
    public String getName()
    {
        return name;
    }
    public int  getAge()
    {
        return age;
    }
    public String toString()
    {
        return name+":"+age;
    }
}
class StuNameComparator implements Comparator<Student>
{
    public int compare(Student s1,Student s2)
    {
        int num = s1.getName().compareTo(s2.getName());
        if(num==0)
        {
            return new Integer(s1.getAge()).compareTo(new Integer(s2.getAge()));
        }
        return num;
    }
} 

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值