treeMap和HashMap键集合键是Student,值是String案例
分析
- 键是学生对象,代表每一个学生
- 值是字符串对象,代表学生住址
- treeMap有排序功能,所以需要重写compareTo 方法,这也是treeMap和HashMap键集合键是Student,值是String案例二者的区别
- 思路
- 创建Student类
- 重写toString 方法
- 重写hashCode方法
- 重写compareTo 方法,以年龄为主要条件,以姓名为次要条件
- 定义treeMap集合
- 重写compare方法
- 存储元素
- 输出结果
主函数
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}=广州}