TreeSet集合的特点是 可排序,不重复,无索引。
其中,可排序指的是 1.对于数值类型的数据默认进行升序排序。 2.对于字符串类型的数据按照首字母的顺序进行排序。 3.对于自定义的数据类型无法直接排序,需要我们来设定排序准则。
对于数值类型和字符串类型的TreeSst使用代码示例如下:
- import java.util.Set;
- import java.util.TreeSet;
-
- public class setdemo {
- public static void main(String[] args) {
- Set
setdemo1=new TreeSet<>();//数值类型的 - setdemo1.add(55);
- setdemo1.add(33);
- setdemo1.add(77);
- setdemo1.add(11);
- setdemo1.add(88);
- System.out.println(setdemo1);
- System.out.println("---------");
- Set
setdemo2=new TreeSet<>();//字符串类型的 - setdemo2.add("java");
- setdemo2.add("mysql");
- setdemo2.add("about");
- System.out.println(setdemo2);
- }
- }
运行结果如下:
而当TreeSet集合对自定义数据类型进行比较时,有如下两种方法:
1.让自定义的类实现Comparable接口并重写其中的compareTo方法来制定比较的规则。
代码示例如下:
-
- import java.util.Set;
- import java.util.TreeSet;
-
- public class setdemo {
- public static void main(String[] args) { //主函数
- System.out.println("------");
- Set
stu=new TreeSet<>(); - stu.add(new Student("小王",15,"男"));
- stu.add(new Student("小韩",18,"女"));
- stu.add(new Student("小周",12,"男"));
- System.out.println(stu);
-
- }
- }
-
-
- public class Student implements Comparable
{ - private String name;
- private int age;
- private String sex;
-
- public Student() {
- }
-
- public Student(String name, int age, String sex) {
- this.name = name;
- this.age = age;
- this.sex = sex;
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public int getAge() {
- return age;
- }
-
- public void setAge(int age) {
- this.age = age;
- }
-
- public String getSex() {
- return sex;
- }
-
- public void setSex(String sex) {
- this.sex = sex;
- }
-
- @Override
- public String toString() {
- return "Student{" +
- "name='" + name + '\'' +
- ", age=" + age +
- ", sex='" + sex + '\'' +
- '}';
- }
-
- @Override//类自定义比较规则
- public int compareTo(Student student) {
- //假如按照年龄大小来比较
-
- return this.age-student.age;
- }
- }
运行结果如下:
2.使用集合自带的比较器制定比较规则。
代码示例如下:
- import java.util.Comparator;
- import java.util.Set;
- import java.util.TreeSet;
-
- public class setdemo {
- public static void main(String[] args) {
- System.out.println("------");
- Set
stu=new TreeSet<>(new Comparator() { //利用自带的比较器创建规则 - @Override
- public int compare(Student t, Student t1) {
- return t.getAge()-t1.getAge();
- }
- });
- stu.add(new Student("小王",15,"男"));
- stu.add(new Student("小韩",18,"女"));
- stu.add(new Student("小周",12,"男"));
- System.out.println(stu);
-
- }
- }
运行结果如下:
另外,我们对List和Set中各集合的使用特点做如下总结:
ArrayList集合:数据可重复、有索引、查询快(基于数组);
LinkedList集合: 数据可重复、有索引、首位数据增删快(基于链表);
HashSet集合:数据不重复、无序、无索引、增删改查较快(基于哈希表);
LinkedSet集合:数据不重复、有序、无索引、增删改查较快(基于哈希表和双链表);
TreeSet集合:根据自身需求对数据进行排序等操作(基于红黑树)。