TreeMap集合保存自定义对象
package com.jd.text;
import java.util.Set;
import java.util.TreeMap;
/*
* TreeMap保存自定义对象,比较的Comparable和Comparator两种方式
* 1.通过实现Comparable接口,重写compareTo()方法。
*/
public class Demo07 {
public static void main(String[] args) {
TreeMap map=new TreeMap<>();
map.put(new User("张三01", 12),11);
map.put(new User("张三01", 10),11);
map.put(new User("张三02", 13),11);
map.put(new User("张三01", 12),11);
//通过重写hashCode()和equals( obj)方法防止重复的值存入
Set set = map.keySet();
for ( key : set) {
value = map.get(key);
System.out.println(key + ":" + value);
}
}
}
package com.jd.text; /* * 通过实现Comparable接口,重写compareTo()方法。 */ public class User implements Comparable{ private String name; private int 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; } @Override public String toString() { return "User [name=" + name + ", age=" + age + "]"; } public User(String name, int age) { super(); this.name = name; this.age = age; } public User() { super(); } @Override public int hashCode() { final int prime=31; int result=1; result=prime*result+age; result=prime*result+((name==null)?0:name.hashCode()); return result; } @Override public boolean equals( obj) { if(this==obj) return true; if(obj==null) return false; if(getClass()!=obj.getClass()) return false; User user=(User) obj; if(age!=user.age) return false; if(name==null){ if(user.name!=null) return false; }else if(!name.equals(user.name)) return false; return true; } @Override public int compareTo( o) { if(o instanceof User){ User user=(User) o; int sum=name.compareTo(user.name); if(sum==0) return age-user.age; return sum; } throw new ClassCastException("不是User类型"); } }
运行结果:
User [name=张三01, age=10]:11 User [name=张三01, age=12]:11 User [name=张三02, age=13]:11
package com.jd.text; /* * TreeMap保存自定义对象,比较的Comparable和Comparator两种方式 * 2.自己构造比较器实现Comparator接口,重写compare( o1, o2)方法 */ import java.util.Comparator; import java.util.Set; import java.util.TreeMap; public class Demo08 { public static void main(String[] args) { TreeMap map=new TreeMap(new MyCompare()); map.put(new User2("张三01", 12),11); map.put(new User2("张三01", 10),11); map.put(new User2("张三02", 13),11); map.put(new User2("张三01", 12),11); //通过重写hashCode()和equals( obj)方法防止重复的值存入 Set set = map.keySet(); for ( key : set) { value = map.get(key); System.out.println(key + ":" + value); } } } class User2{ String name; int age; public User2(String name,int age){ this.name=name; this.age=age; } @Override public int hashCode(){ final int prime=31; int result=1; result=prime*result+age; result=prime*result+((name==null)?0:name.hashCode()); return result; } @Override public boolean equals( obj){ if(this==obj) return true; if(obj==null) return false; if(getClass()!=obj.getClass()) return false; User2 u=(User2) obj; if(age!=u.age) return false; if(name==null){ if(u.name!=null) return false; }else if(!name.equals(u.name)) return false; return true; } @Override public String toString() { return "User2 [name=" + name + ", age=" + age + "]"; } } //比较器 class MyCompare implements Comparator{ @Override public int compare( o1, o2) { if(o1 instanceof User2 && o2 instanceof User2){ User2 u1=(User2) o1; User2 u2=(User2) o2; int sum=u1.age-u2.age; if(sum==0){ return u1.name.compareTo(u2.name); } return sum; } throw new ClassCastException("不是User2 类型"); } }
运行结果:
User2 [name=张三01, age=10]:11 User2 [name=张三01, age=12]:11 User2 [name=张三02, age=13]:11
继续阅读与本文标签相同的文章
下一篇 :
python类的约束实例讲解
-
Istio从懵圈到熟练 – 二分之一活的微服务
2026-05-19栏目: 教程
-
又一个里程碑,谷歌发布最新研究,机器学习开辟新篇章!
2026-05-19栏目: 教程
-
面对人工智能的发展,人类未来将扮演怎样的角色?
2026-05-19栏目: 教程
-
2019 DevOps 必备面试题——持续集成篇
2026-05-19栏目: 教程
-
从“人工智障”到“人工智能”,Siri开始说人话了!
2026-05-19栏目: 教程
