首页 > 其他分享 >TreeSet实现类使用

TreeSet实现类使用

时间:2022-11-01 17:12:47浏览次数:54  
标签:name 实现 ts add Student 使用 public TreeSet

【1】存入Integer类型数据(底层用的是内部比较器)

package com.msb.test09;

import java.util.TreeSet;

/**
 * @author : liu
 * 日期:16:09:57
 * 描述:IntelliJ IDEA
 * 版本:1.0
 */
public class Test01 {
    //这是一个main方法:是程序的入口
    public static void main(String[] args) {
        //创建一个TreeSet:
        TreeSet<Integer> ts=new TreeSet<>();
        ts.add(12);
        ts.add(3);
        ts.add(7);
        ts.add(9);
        ts.add(3);
        ts.add(16);
        System.out.println(ts.size());
        System.out.println(ts);
    }
}

特点:唯一,无序(没有按照输入顺序进行输出),有序(按照升序进行遍历)

【2】原理:底层:二叉树(数据结构中的一个逻辑结构)

 

 【3】存入String类型数据(底层实现了内部比较器)

package com.msb.test09;

import java.util.TreeSet;

/**
 * @author : liu
 * 日期:16:22:37
 * 描述:IntelliJ IDEA
 * 版本:1.0
 */
public class Test02 {
    //这是一个main方法:是程序的入口
    public static void main(String[] args) {
        TreeSet<String> ts=new TreeSet<>();
        ts.add("elili");
        ts.add("blili");
        ts.add("alili");
        ts.add("elili");
        ts.add("clili");
        ts.add("flili");
        ts.add("glili");
        System.out.println(ts.size());
        System.out.println(ts);
    }
}

【4】想放入自定义的Student类型数据

(1)利用内部比较器

package com.msb.test09;

/**
 * @author : liu
 * 日期:16:27:51
 * 描述:IntelliJ IDEA
 * 版本:1.0
 */
public class Student implements Comparable<Student>{
    private int age;
    private String name;

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Student(int age, String name) {
        this.age = age;
        this.name = name;
    }

    @Override
    public String toString() {
        return "Student{" +
                "age=" + age +
                ", name='" + name + '\'' +
                '}';
    }

    @Override
    public int compareTo(Student o) {
        return this.getAge()-o.getAge();
    }
}
package com.msb.test09;

import java.util.TreeSet;

/**
 * @author : liu
 * 日期:16:09:57
 * 描述:IntelliJ IDEA
 * 版本:1.0
 */
public class Test01 {
    //这是一个main方法:是程序的入口
    public static void main(String[] args) {
        //创建一个TreeSet:
        TreeSet<Integer> ts=new TreeSet<>();
        ts.add(12);
        ts.add(3);
        ts.add(7);
        ts.add(9);
        ts.add(3);
        ts.add(16);
        System.out.println(ts.size());
        System.out.println(ts);
    }
}

(2)内部比较器

package com.msb.test09;

import java.util.Comparator;

/**
 * @author : liu
 * 日期:16:27:51
 * 描述:IntelliJ IDEA
 * 版本:1.0
 */
public class Student {
    private int age;
    private String name;

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Student(int age, String name) {
        this.age = age;
        this.name = name;
    }

    @Override
    public String toString() {
        return "Student{" +
                "age=" + age +
                ", name='" + name + '\'' +
                '}';
    }
}
class BiJiao implements Comparator<Student>{
    @Override
    public int compare(Student o1, Student o2) {
        return o1.getName().compareTo(o2.getName());
    }
    public BiJiao() {
    }
}
package com.msb.test09;

import java.util.Comparator;
import java.util.TreeSet;

/**
 * @author : liu
 * 日期:16:30:56
 * 描述:IntelliJ IDEA
 * 版本:1.0
 */
public class Test03 {
    //这是一个main方法:是程序的入口
    public static void main(String[] args) {
        //创建一个TreeSet
        //利用外部比较器,必须自己指定:
        Comparator<Student> com= new BiJiao();
        TreeSet<Student> ts=new TreeSet<>(com);//一旦指定外部比较器,那么就会按照外部比较器来比较
        ts.add(new Student(10,"elili"));
        ts.add(new Student(8,"blili"));
        ts.add(new Student(4,"alili"));
        ts.add(new Student(9,"clili"));
        ts.add(new Student(10,"elili"));
        ts.add(new Student(1,"dlili"));
        System.out.println(ts.size());
        System.out.println(ts);
    }
}

实际开发中利用外部比较器多,因为扩展性好(多态)

换一种写法:

package com.msb.test09;

import java.util.Comparator;
import java.util.TreeSet;

/**
 * @author : liu
 * 日期:16:30:56
 * 描述:IntelliJ IDEA
 * 版本:1.0
 */
public class Test03 {
    //这是一个main方法:是程序的入口
    public static void main(String[] args) {
        //创建一个TreeSet
        //利用外部比较器,必须自己指定:
       /* Comparator<Student> com= new Comparator<Student>() {//匿名内部类
            @Override
            public int compare(Student o1, Student o2) {
                return o1.getName().compareTo(o2.getName());
            }
        };*/
        TreeSet<Student> ts=new TreeSet<>(new Comparator<Student>() {//匿名内部类
            @Override
            public int compare(Student o1, Student o2) {
                return o1.getName().compareTo(o2.getName());
            }
        });//一旦指定外部比较器,那么就会按照外部比较器来比较
        ts.add(new Student(10,"elili"));
        ts.add(new Student(8,"blili"));
        ts.add(new Student(4,"alili"));
        ts.add(new Student(9,"clili"));
        ts.add(new Student(10,"elili"));
        ts.add(new Student(1,"dlili"));
        System.out.println(ts.size());
        System.out.println(ts);
    }
}

 

【5】TreeSet底层二叉树遍历是按照升序的结果出现的,这个升序是靠终须遍历得到的:

 

标签:name,实现,ts,add,Student,使用,public,TreeSet
From: https://www.cnblogs.com/jeldp/p/16848365.html

相关文章