学习目标:
提示:1,掌握TreeSet类概述
学习内容:
TreeSet类 1. TreeSet: 元素唯一,且元素的顺序可以按照某种规则进行排序 排序的方式有两种:
自然排序
比较器排序
TreeSet的俩个特点:排序和唯一
public class TreeSetDemo {
public static void main(String[] args) {
//创建集合对象
//构造一个新的,空的树组,根据其元素的自然排序进行排序
//无参构造内部元素默认是自然排序
TreeSet<Integer> ts = new TreeSet<>();
//创建对象
ts.add(20);
ts.add(18);
ts.add(23);
ts.add(22);
ts.add(17);
ts.add(24);
ts.add(19);
ts.add(18);
ts.add(24);
//遍历
for (Integer t:ts){
System.out.println(t);
}
}
}
-
TreeSet集合存储自定义对象并保证排序和唯一
1、如果什么都没告诉我们排序规则,是什么排序?
自然排序,按照年龄从大到小进行排序
2、元素什么什么情况下才算唯一呢?
成员变量的值都相同的情况算唯一的,就是同一个元素
import java.util.TreeSet;
public class TreeSetDemo2 {
public static void main(String[] args) {
//创建集合对象
TreeSet<Student> s = new TreeSet<>();
//创建几个学生对象
Student s1 = new Student("李元浩", 24);
Student s2 = new Student("李相赫", 27);
Student s3 = new Student("乌兹", 25);
Student s4 = new Student("厂长", 21);
Student s5 = new Student("刘青松", 24);
Student s6 = new Student("硬币哥", 28);
Student s7 = new Student("姿态", 25);
//将学生对象添加到集合中
s.add(s1);
s.add(s2);
s.add(s3);
s.add(s4);
s.add(s5);
s.add(s6);
s.add(s7);
for (Student S:s){
System.out.println(S.getName()+"*****************"+S.getAge());
}
}
}
import java.util.Objects;
public class Student implements Comparable<Student> {
private String name;
private int age;
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
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;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
@Override
public int compareTo(Student o) {
// return 0;
int i = this.age - o.age;
int i2 =i ==0?this.name.compareTo(o.name):i;//三目运算符
return i2;
}
// @Override
// public int compareTo(Object o) {
return 0;
return 1;
return -1;
//
// //这里返回什么,其实应该是根据我的规则来进行排序
// //我们明确知道是按照年龄的大小,从大到小排序
// //在分析的时候,要注意什么是主要条件,什么是次要条件,缺一不可
//
//
//
// }
}
- 需求:使用TreeSet存储自定义对象,根据姓名的长度来排序
import java.util.TreeSet;
/*
需求:使用TreeSet存储自定义对象,根据姓名的长度来排序
*/
public class TreeSetDemo3 {
public static void main(String[] args) {
//创建集合对象
TreeSet<Student2> students = new TreeSet<Student2>();
//创建学生对象
Student2 s1 = new Student2("chenjunrong", 18);
Student2 s2 = new Student2("zhudan", 19);
Student2 s3 = new Student2("chuying", 18);
Student2 s4 = new Student2("liuzilong", 20);
Student2 s5 = new Student2("guoyuming", 16);
Student2 s6 = new Student2("xiatin", 19);
Student2 s7 = new Student2("liuzilong", 22);
//将学生对象插入到集合中
students.add(s1);
students.add(s2);
students.add(s3);
students.add(s4);
students.add(s5);
students.add(s6);
students.add(s7);
//遍历
for (Student2 student : students) {
System.out.println(student.getName() + "---" + student.getAge());
}
}
}
public class Student3 implements Comparable<Student3> {
private String name;
private int age;
public Student3() {
}
public Student3(String name, int age) {
this.name = name;
this.age = age;
}
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;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
@Override
public int compareTo(Student3 o) {
int i = this.name.length() - o.name.length();
//姓名的长度相同不代表内容也相同
int i2=i ==0 ? this.name.compareTo(o.name):i;
//姓名的长度和内容都一样,但是年龄可能不一样
int i3 =i2 ==0? this.age -o.age :i2;
return i3;
}
}