• java中TreeSet的详解与使用


           TreeSet集合的特点是 可排序,不重复,无索引。

           其中,可排序指的是 1.对于数值类型的数据默认进行升序排序。 2.对于字符串类型的数据按照首字母的顺序进行排序。 3.对于自定义的数据类型无法直接排序,需要我们来设定排序准则。

    对于数值类型和字符串类型的TreeSst使用代码示例如下:

    1. import java.util.Set;
    2. import java.util.TreeSet;
    3. public class setdemo {
    4. public static void main(String[] args) {
    5. Set setdemo1=new TreeSet<>();//数值类型的
    6. setdemo1.add(55);
    7. setdemo1.add(33);
    8. setdemo1.add(77);
    9. setdemo1.add(11);
    10. setdemo1.add(88);
    11. System.out.println(setdemo1);
    12. System.out.println("---------");
    13. Set setdemo2=new TreeSet<>();//字符串类型的
    14. setdemo2.add("java");
    15. setdemo2.add("mysql");
    16. setdemo2.add("about");
    17. System.out.println(setdemo2);
    18. }
    19. }

    运行结果如下:

             而当TreeSet集合对自定义数据类型进行比较时,有如下两种方法:

            1.让自定义的类实现Comparable接口并重写其中的compareTo方法来制定比较的规则。

    代码示例如下:

    1. import java.util.Set;
    2. import java.util.TreeSet;
    3. public class setdemo {
    4. public static void main(String[] args) { //主函数
    5. System.out.println("------");
    6. Set stu=new TreeSet<>();
    7. stu.add(new Student("小王",15,"男"));
    8. stu.add(new Student("小韩",18,"女"));
    9. stu.add(new Student("小周",12,"男"));
    10. System.out.println(stu);
    11. }
    12. }
    13. public class Student implements Comparable {
    14. private String name;
    15. private int age;
    16. private String sex;
    17. public Student() {
    18. }
    19. public Student(String name, int age, String sex) {
    20. this.name = name;
    21. this.age = age;
    22. this.sex = sex;
    23. }
    24. public String getName() {
    25. return name;
    26. }
    27. public void setName(String name) {
    28. this.name = name;
    29. }
    30. public int getAge() {
    31. return age;
    32. }
    33. public void setAge(int age) {
    34. this.age = age;
    35. }
    36. public String getSex() {
    37. return sex;
    38. }
    39. public void setSex(String sex) {
    40. this.sex = sex;
    41. }
    42. @Override
    43. public String toString() {
    44. return "Student{" +
    45. "name='" + name + '\'' +
    46. ", age=" + age +
    47. ", sex='" + sex + '\'' +
    48. '}';
    49. }
    50. @Override//类自定义比较规则
    51. public int compareTo(Student student) {
    52. //假如按照年龄大小来比较
    53. return this.age-student.age;
    54. }
    55. }

    运行结果如下:

             2.使用集合自带的比较器制定比较规则。

    代码示例如下:

    1. import java.util.Comparator;
    2. import java.util.Set;
    3. import java.util.TreeSet;
    4. public class setdemo {
    5. public static void main(String[] args) {
    6. System.out.println("------");
    7. Set stu=new TreeSet<>(new Comparator() { //利用自带的比较器创建规则
    8. @Override
    9. public int compare(Student t, Student t1) {
    10. return t.getAge()-t1.getAge();
    11. }
    12. });
    13. stu.add(new Student("小王",15,"男"));
    14. stu.add(new Student("小韩",18,"女"));
    15. stu.add(new Student("小周",12,"男"));
    16. System.out.println(stu);
    17. }
    18. }

     运行结果如下:

    另外,我们对List和Set中各集合的使用特点做如下总结:

    ArrayList集合:数据可重复、有索引、查询快(基于数组);

    LinkedList集合: 数据可重复、有索引、首位数据增删快(基于链表);

    HashSet集合:数据不重复、无序、无索引、增删改查较快(基于哈希表);

    LinkedSet集合:数据不重复、有序、无索引、增删改查较快(基于哈希表和双链表);

    TreeSet集合:根据自身需求对数据进行排序等操作(基于红黑树)。

  • 相关阅读:
    mits6.081_lab1
    Java:在Java 8及更高版本中使用Java流
    linux安装redis
    linux-进程管理
    linux环境下使用rsync命令完成数据同步
    Moonbeam团队发布针对整数截断漏洞的紧急安全修复
    小样本目标检测:ECEA: Extensible Co-Existing Attention for Few-Shot Object Detection
    Flask Run运行机制剖析
    IDEA2021中使用Git(2.38.1)和Gitee
    UnitTest框架
  • 原文地址:https://blog.csdn.net/m0_54185237/article/details/126540737