TreeSet集合的特点是 可排序,不重复,无索引。
其中,可排序指的是 1.对于数值类型的数据默认进行升序排序。 2.对于字符串类型的数据按照首字母的顺序进行排序。 3.对于自定义的数据类型无法直接排序,需要我们来设定排序准则。
对于数值类型和字符串类型的TreeSst使用代码示例如下:
import java.util.Set;
import java.util.TreeSet;
public class setdemo {
public static void main(String[] args) {
Set<Integer> 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<String> 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<Student> 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<Student> {
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<Student> stu=new TreeSet<>(new Comparator<Student>() { //利用自带的比较器创建规则
@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集合:根据自身需求对数据进行排序等操作(基于红黑树)。