treeMap和HashMap键是学生值是String的案例

treeMap和HashMap键集合键是Student,值是String案例

分析

  1. 键是学生对象,代表每一个学生
  2. 值是字符串对象,代表学生住址
  3. treeMap有排序功能,所以需要重写compareTo 方法,这也是treeMap和HashMap键集合键是Student,值是String案例二者的区别
  4. 思路
  5. 创建Student类
  6. 重写toString 方法
  7. 重写hashCode方法
  8. 重写compareTo 方法,以年龄为主要条件,以姓名为次要条件
  9. 定义treeMap集合
  10. 重写compare方法
  11. 存储元素
  12. 输出结果

主函数

mport java.util.Comparator;
import java.util.TreeMap;

public class Treemap {
    public static void main(String[] args) {
        TreeMap <Student, String> tm = new TreeMap <> (new Comparator <Student> ( ) {
            @Override
            public int compare(Student s1 , Student s2) {
                int num = s1.getName ( ).compareTo (s2.getName ( ));   //按照姓名比较
                return num == 0 ? s1.getAge ( ) - s2.getAge ( ) : num;
            }
        });
        tm.put (new Student ("张三" , 23) , "北京");
        tm.put (new Student ("王五" , 23) , "天津");
        tm.put (new Student ("李四" , 23) , "上海");
        tm.put (new Student ("赵六" , 23) , "广州");
        System.out.println (tm);    //没有实现compare,所以这样出错,需要重写compareTo
    }
}

treeMap Student类代码

import java.util.Objects;

public class Student implements Comparable <Student> {
    private String name;
    private int age;

    public Student() {
        super ( );
    }

    public Student(String name , int age) {
        super ( );
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    @Override   //重写ToString方法
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof Student)) return false;
        Student student = (Student) o;
        return age == student.age &&
                Objects.equals (name , student.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash (name , age);
    }

    @Override
    public int compareTo(Student o) {
        int num = this.age - o.age; //以年龄为主要条件
        return num == 0 ? this.name.compareTo (o.name) : num; //以姓名为次要条件
    }
}

结果
{Student{name='张三', age=23}=上海, Student{name='王五', age=23}=安徽, Student{name='李四', age=23}=广州}

HashMap键是学生值是String的案例

主函数

import java.util.HashMap;
/*HashMap集合键是Student,值是String案例
* 键是学生对象,代表每一个学生
* 值是字符串对象,代表学生住址*/
public class Demo2_HashMap {
    public static void main(String[] args) {
        HashMap<Student,String> hm = new HashMap <> ();
        hm.put (new Student ("张三",23),"北京");
        hm.put (new Student ("张三",23),"上海");
        hm.put (new Student ("李四",23),"广州");
        hm.put (new Student ("王五",23),"安徽");
        System.out.println (hm);
    }
}

Student类


import java.util.Objects;

public class Student  {
    private String name;
    private int age;

    public Student() {
        super ( );
    }

    public Student(String name , int age) {
        super ( );
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    @Override   //重写ToString方法
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof Student)) return false;
        Student student = (Student) o;
        return age == student.age &&
                Objects.equals (name , student.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash (name , age);
    }

  /*  @Override
    public int compareTo(Student o) {
        int num = this.age - o.age; //以年龄为主要条件
        return num == 0 ? this.name.compareTo (o.name) : num; //以姓名为次要条件*/
    }
    结果
{Student{name='张三', age=23}=上海, Student{name='王五', age=23}=安徽, Student{name='李四', age=23}=广州}


发布了55 篇原创文章 · 获赞 5 · 访问量 4169

猜你喜欢

转载自blog.csdn.net/qq_43654669/article/details/100161855