主要实现对象排序
java.util.TreeSet
TreeSet中容纳的对象必须要能够排序(排序方式由自己来定义)
两种排序的比较器
1.java.util.Comparable
TreeSet使用无参数的构造函数,那么容纳的对象必须实现 Comparable接口
2.java.util.Comparator
TreeSet构造的时候使用Comparator作为构造函数的参数,
比较方法如果返回0,那么对象不能重复加入
3.数据结构底层是TreeMap
关于Tree的结构我们可以不用深入去了解,熟悉使用即可
1 import java.util.Comparator; 2 import java.util.TreeSet; 3 4 5 public class TreeSetDemo { 6 public static void main(String[] args) { 7 User user1=new User("vn1","123",10); 8 User user2=new User("b2","234",10); 9 User user3=new User("c3","456",13); 10 //TreeSet<User> jhl=new TreeSet<User>(); 11 TreeSet<User> jhl=new TreeSet<User>(new aa()); 12 jhl.add(user1); 13 jhl.add(user2); 14 jhl.add(user3); 15 System.out.println(jhl); 16 } 17 } 18 //方法一:添加比较器 19 class aa implements Comparator<User>{ 20 21 22 public int compare(User o1, User o2) { 23 24 if(!o1.name.equals(o2.name)){ //名称是否相同 25 return o1.name.compareTo(o2.name); 26 }else if(o1.age!=o2.age){ //年龄是否相同 27 return o1.age-o2.age; 28 }else if(!o1.wordpass.equals(o2.wordpass)){ //密码是否相同 29 return o1.wordpass.compareTo(o2.wordpass); 30 } 31 return 0; 32 } 33 } 34 /* 35 *方法二:添加User比较 36 //必须添加Comparable比较规则,才能进行TreeSet的添加,且能规定天下顺序 37 class User implements Comparable<User>{ 38 String name; 39 String wordpass; 40 int age; 41 public User() {} 42 public User(String name, String wordpass, int age) { 43 super(); 44 this.name = name; 45 this.wordpass = wordpass; 46 this.age = age; 47 } 48 public String getName() { 49 return name; 50 } 51 public void setName(String name) { 52 this.name = name; 53 } 54 public String getWordpass() { 55 return wordpass; 56 } 57 public void setWordpass(String wordpass) { 58 this.wordpass = wordpass; 59 } 60 public int getAge() { 61 return age; 62 } 63 public void setAge(int age) { 64 this.age = age; 65 } 66 @Override 67 public String toString() { 68 return "User [name=" + name + ", wordpass=" + wordpass + ", age=" + age 69 + "]"; 70 } 71 public int compareTo(User o) {//compareTo的功能是比较(排序)功能(内部自动交换比较) 72 if(!this.name.equals(o.name)){ 73 return this.name.compareTo(o.name); 74 }else if(this.age!=o.age){ 75 76 return this.age-o.age; 77 }else if(!this.wordpass.equals(o.wordpass)){ 78 return this.wordpass.compareTo(o.wordpass); 79 } 80 return 0; 81 } 82 }*/ 83 84 class User { 85 String name; 86 String wordpass; 87 int age; 88 public User() {} 89 public User(String name, String wordpass, int age) { 90 super(); 91 this.name = name; 92 this.wordpass = wordpass; 93 this.age = age; 94 } 95 public String getName() { 96 return name; 97 } 98 public void setName(String name) { 99 this.name = name; 100 } 101 public String getWordpass() { 102 return wordpass; 103 } 104 public void setWordpass(String wordpass) { 105 this.wordpass = wordpass; 106 } 107 public int getAge() { 108 return age; 109 } 110 public void setAge(int age) { 111 this.age = age; 112 } 113 @Override 114 public String toString() { 115 return "User [name=" + name + ", wordpass=" + wordpass + ", age=" + age + "]"; 116 } 117 118 }