- TreeMap中添加key-value,要求key要求必须是由同一个类创建的对象。
- 因为要按照key进行排序:自然排序、定制排序
User类:
public class User implements Comparable {
private String name;
private int age;
...
@Override
public boolean equals(Object o) {
System.out.println("User equals()....");
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
User user = (User) o;
if (age != user.age) return false;
return name != null ? name.equals(user.name) : user.name == null;
}
@Override
public int hashCode() {
int result = name != null ? name.hashCode() : 0;
result = 31 * result + age;
return result;
}
//按照姓名降序,年龄升序
@Override
public int compareTo(Object o) {
if (o instanceof User) {
User user = (User) o;
// return -this.name.compareTo(user.name);
int compare = -this.name.compareTo(user.name);
if (compare!=0){
return compare;
}else {
return Integer.compare(this.age,user.age);
}
}
throw new RuntimeException("输入类型不匹配");
}
}
自然排序:按照姓名降序,年龄升序
//自然排序
@Test
public void test() {
TreeMap map = new TreeMap();
User u1 = new User("Tom", 23);
User u2 = new User("Jerry", 32);
User u3 = new User("Jack", 20);
User u4 = new User("Rose", 18);
map.put(u1, 98);
map.put(u2, 89);
map.put(u3, 56);
map.put(u4, 100);
Set entrySet = map.entrySet();
Iterator iterator = entrySet.iterator();
while (iterator.hasNext()) {
Object obj = iterator.next();
Map.Entry entry = (Map.Entry) obj;
System.out.println(entry.getKey() + "--->" + entry.getValue());
}
}
输出结果:
User{name='Tom', age=23}--->98
User{name='Rose', age=18}--->100
User{name='Jerry', age=32}--->89
User{name='Jack', age=20}--->56
定制排序:按年龄排序
//定制排序
@Test
public void test1() {
TreeMap map = new TreeMap(new Comparator() {
@Override
public int compare(Object o1, Object o2) {
if(o1 instanceof User&& o2 instanceof User){
User u1= (User) o1;
User u2= (User) o2;
return Integer.compare(u1.getAge(),u2.getAge());
}
throw new RuntimeException("输入的类型不一致!");
}
});
User u1 = new User("Tom", 23);
User u2 = new User("Jerry", 32);
User u3 = new User("Jack", 20);
User u4 = new User("Rose", 18);
map.put(u1, 98);
map.put(u2, 89);
map.put(u3, 56);
map.put(u4, 100);
Set entrySet = map.entrySet();
Iterator iterator = entrySet.iterator();
while (iterator.hasNext()) {
Object obj = iterator.next();
Map.Entry entry = (Map.Entry) obj;
System.out.println(entry.getKey() + "--->" + entry.getValue());
}
}
输出结果:
User{name='Rose', age=18}--->100
User{name='Jack', age=20}--->56
User{name='Tom', age=23}--->98
User{name='Jerry', age=32}--->89