package java2; import org.junit.Test; import java.util.Comparator; import java.util.Iterator; import java.util.Set; import java.util.TreeMap; /** * @author 冀帅 * @date 2020/8/12-16:07 */ public class TreeMapTest { //向TreeMap中添加key-value,要求key必须是由同一个类创建的对象 //因为要按照key进行排序:自然排序,定制排序 //自然排序 @Test public void test1(){ 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,76); map.put(u4,100); Set entrySet = map.entrySet(); Iterator iterator = entrySet.iterator(); while (iterator.hasNext()){ System.out.println(iterator.next()); } } //定制排序 @Test public void test2(){ 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,76); map.put(u4,100); Set entrySet = map.entrySet(); Iterator iterator = entrySet.iterator(); while (iterator.hasNext()){ System.out.println(iterator.next()); } } }
package java2; /** * @author 冀帅 * @date 2020/8/11-10:59 */ public class User implements Comparable { private String name; private int age; @Override public boolean equals(Object o) { 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.equals(user.name); } @Override public int hashCode() { int result = name.hashCode(); result = 31 * result + age; return result; } @Override public String toString() { return "User{" + "name='" + name + '\'' + ", age=" + 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; } public User(String name, int age) { this.name = name; this.age = age; } public User() { } //按照姓名从小到大排列(自然排序) public int compareTo(Object o) { if (o instanceof User){ User user =(User)o; // return this.name.compareTo(user.name);//从小到大 // 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);//进入else说明名字相等。就比较年龄。默认从小到大 } }else { throw new RuntimeException("输入的类型不匹配"); } } }