TreeSet集合
总结于尚硅谷学习视频
1.向TreeSet中添加的数据,要求是相同类的对象。
2.两种排序方式:自然排序(实现Comparable接口)和定制排序(comparator)
3.自然排序中,比较两个对象是否相同的标准为:compareTo()返回0,不在是equals()。
4.定制排序中,比较两个对象是否相同的标准为:compare()返回0,不再是equals()。
TreeSet类
package com.day0307_1; import org.junit.jupiter.api.Test; import java.util.Comparator; import java.util.Iterator; import java.util.TreeSet; /** * */ public class TreeSetTest { /* 1.向TreeSet中添加的数据,要求是相同类的对象。 2.两种排序方式:自然排序(实现Comparable接口)和定制排序(comparator) 3.自然排序中,比较两个对象是否相同的标准为:compareTo()返回0,不在是equals()。 4.定制排序中,比较两个对象是否相同的标准为:compare()返回0,不再是equals()。 */ @Test public void test1(){ TreeSet set=new TreeSet(); //失败:不能添加不同类的对象 // set.add(123); // set.add(456); // set.add("AA"); // set.add(new User("Tom",12)); //举例一: // set.add(34); // set.add(-34); // set.add(43); // set.add(11); // set.add(8); //举例二: set.add(new User("Tom",12)); set.add(new User("Jerry",32)); set.add(new User("Jim",2)); set.add(new User("Mike",65)); set.add(new User("Jack",33)); set.add(new User("Jack",56)); Iterator iterator= set.iterator(); while (iterator.hasNext()){ System.out.println(iterator.next()); } } @Test public void test2(){ Comparator com=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()); }else{ throw new RuntimeException("输入的数据类型不匹配"); } } }; TreeSet set=new TreeSet(com); set.add(new User("Tom",12)); set.add(new User("Jerry",32)); set.add(new User("Jim",2)); set.add(new User("Mike",65)); set.add(new User("Mary",33)); set.add(new User("Jack",33)); set.add(new User("Jack",56)); Iterator iterator= set.iterator(); while (iterator.hasNext()){ System.out.println(iterator.next()); } } }
User类
package com.day0307_1; import java.util.Objects; public class User implements Comparable{ private String name; private int age; public User() { } public User(String name, int age) { this.name = name; this.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; } @Override public String toString() { return "User{" + "name='" + name + '\'' + ", age=" + 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; return age == user.age && Objects.equals(name, user.name); } @Override public int hashCode() { return Objects.hash(name, age); } //按姓名从大到小,年龄从小到大排列 @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); } }else{ throw new RuntimeException("输入的类型不匹配"); } } }