微信登录

Set集合 - TreeSet - 左小右大

可以按照添加对象的属性,指定排序
可以只按照一个属性添加对象的属性,指定排序
红黑树
看第一个数,添加的数第一个小放左边,添加的数第一个大放右边
不可以放相同的数
自然排序:(实现Comparable接口)判断标准CompareTo返回0,不是用equals()
定制排序:(实现Comparator接口)判断标准Compare返回0,不是用equals()

自然排序

  1. public void test1(){
  2. TreeSet set = new TreeSet();
  3. //失败:不能添加不同类的对象
  4. // set.add(123);
  5. // set.add(456);
  6. // set.add("AA");
  7. // set.add(new User("Tom",12));
  8. //举例一:
  9. // set.add(34);
  10. // set.add(-34);
  11. // set.add(43);
  12. // set.add(11);
  13. // set.add(8);
  14. //举例二:
  15. set.add(new User("Tom",12));
  16. set.add(new User("Jerry",32));
  17. set.add(new User("Jim",2));
  18. set.add(new User("Mike",65));
  19. set.add(new User("Jack",33));
  20. set.add(new User("Jack",56));
  21. Iterator iterator = set.iterator();
  22. while(iterator.hasNext()){
  23. System.out.println(iterator.next());
  24. }
  25. }

定制排序

  1. public void test2(){
  2. Comparator com = new Comparator() {
  3. //按照年龄从小到大排列
  4. @Override
  5. public int compare(Object o1, Object o2) {
  6. if(o1 instanceof User && o2 instanceof User){
  7. User u1 = (User)o1;
  8. User u2 = (User)o2;
  9. return Integer.compare(u1.getAge(),u2.getAge());
  10. }else{
  11. throw new RuntimeException("输入的数据类型不匹配");
  12. }
  13. }
  14. };
  15. TreeSet set = new TreeSet(com);
  16. set.add(new User("Tom",12));
  17. set.add(new User("Jerry",32));
  18. set.add(new User("Jim",2));
  19. set.add(new User("Mike",65));
  20. set.add(new User("Mary",33));
  21. set.add(new User("Jack",33));
  22. set.add(new User("Jack",56));
  23. Iterator iterator = set.iterator();
  24. while(iterator.hasNext()){
  25. System.out.println(iterator.next());
  26. }
  27. }

TreeSet set = new TreeSet(com);实例化用上com
com是自定义排序的规则