1 package settest; 2 3 import listtest.Person; 4 import org.junit.Test; 5 6 import java.util.Comparator; 7 import java.util.Iterator; 8 import java.util.TreeSet; 9 10 /** 11 * 12 * 13 * @author FuJingchao 14 * @Date: 2021/12/20 - 20:28 15 */ 16 public class TreeSetTest { 17 /* 18 1.向TreeSet中添加的数据,要求是相同类的对象 19 2.两种排序方式:自然排序(实现Comparable接口)和定制排序(和Comparator接口相关) 20 21 3.自然排序中,比较两个对象是否相同的标准为:compareTo()返回0,不再是equals() 22 定制排序中,比较两个对象是否相同的标准为:compare()f返回0,不再是equals() 23 */ 24 @Test 25 public void test1() { 26 TreeSet treeSet = new TreeSet(); 27 //失败:不能添加不同类的对象 28 // treeSet.add(123); 29 // treeSet.add(456); 30 // treeSet.add("AA"); 31 // treeSet.add(new Person("Tom",12)); 32 33 //成功:举例一 34 // treeSet.add(12); 35 // treeSet.add(5); 36 // treeSet.add(32); 37 // treeSet.add(-10); 38 // Iterator iterator = treeSet.iterator(); 39 // while (iterator.hasNext()){ 40 // System.out.println(iterator.next()); 41 // } 42 43 //成功:举例二 44 treeSet.add(new Person("Tom",12)); 45 treeSet.add(new Person("jack",5)); 46 treeSet.add(new Person("jim",23)); 47 treeSet.add(new Person("bob",23)); 48 49 Iterator iterator = treeSet.iterator(); 50 while (iterator.hasNext()){ 51 System.out.println(iterator.next()); 52 } 53 54 } 55 56 //按照年龄从大到小排序,再按照姓名名称从小到大排序 57 @Test 58 public void test3 () { 59 Comparator com = new Comparator() { 60 @Override 61 public int compare(Object o1, Object o2) { 62 if(o1 instanceof Person && o2 instanceof Person){ 63 Person p1 = (Person) o1; 64 Person p2 = (Person) o2; 65 int compare = - Integer.compare(p1.getAge(),p2.getAge()); 66 if(compare != 0){ 67 return compare; 68 }else { 69 return p1.getName().compareTo(p2.getName()); 70 } 71 } 72 throw new RuntimeException("输入的数据类型不一致!"); 73 } 74 }; 75 76 TreeSet treeSet = new TreeSet(com); 77 treeSet.add(new Person("Tom",12)); 78 treeSet.add(new Person("jack",5)); 79 treeSet.add(new Person("jim",23)); 80 treeSet.add(new Person("bob",23)); 81 82 Iterator iterator = treeSet.iterator(); 83 while (iterator.hasNext()){ 84 System.out.println(iterator.next()); 85 } 86 87 } 88 89 90 }