package java1; import org.junit.Test; import java.util.Comparator; import java.util.Iterator; import java.util.TreeSet; /** * @author 冀帅 * @date 2020/8/11-16:39 */ public class TreeSetTest { /* * 1.向TreeSet中添加数据,要求是相同类的对象 * 2.两种排序方式:自然排序(实现Comparable接口) 和 定制排序(Comparator接口) * 3.自然排序中,比较两个对象是否相同的标准为:compareTo()返回为0,不再是equals(). * ---treeSet不能放相同的数据 * 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("Jack",33)); set.add(new User("Jack",56));//添加不进去 因为你自己定义的比较是按照名字比较的 //想进来要用二级排序 Iterator iterator = set.iterator(); while (iterator.hasNext()){ System.out.println(iterator.next()); } } }