赞
踩
目录
1:TreeSet集合存储自定义对象并遍历自然排序(按照年龄大小排序)
2:TreeSet集合存储自定义对象并遍历比较器排序(按照年龄大小排序)
使用元素的自然顺序对元素进行排序。
或者根据创建 set 时提供的 Comparator 进行排序。
具体取决于使用的构造方法。
元素唯一,且元素的顺序可以按照某种规则进行排序。
底层数据结构是红黑树(红黑树是一种自平衡的二叉树)。
利用TreeMap里的put方法然后comparabler接口进行排序初始化是null如果进来的数据不是空就进入根然后再进来元素时进行比较大于就在右结点小于就在左结点等于就不操作。后面要传的值要实现comparabler接口否则不能实现。
遍历对象时对象要实现comparabler。
保证唯一的原理:是根据比较的结果是否是0来决定的。
自然排序(传入的数据类型具备实现了Comparable接口)。
比较器排序 TreeSet(Comparator comparator) 构造一个新的,空的树集,根据指定的比较器进行排序。
TreeSet的俩个特点:排序和唯一。
TreeSet集合保证元素的排序和唯一。
- package day27;
-
- import java.util.Objects;
-
- public class Student implements Comparable<Student>{//创建学生类实现 Comparable接口
- private int age;
- private String name;
-
- public Student(int age, String name) {
- this.age = age;
- this.name = name;
- }
-
- public Student() {
- }
-
- 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;
- }
-
- @Override
- public String toString() {
- return "Student{" +
- "age=" + age +
- ", name='" + name + '\'' +
- '}';
- }
-
- @Override
- public boolean equals(Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
- Student student = (Student) o;
- return age == student.age &&
- Objects.equals(name, student.name);
- }
-
- @Override
- public int hashCode() {
-
- return Objects.hash(age, name);
- }
-
- //重写compareTo,比较年龄大小,年龄一样再比较姓名
- @Override
- public int compareTo(Student o) {
- int i=o.age-this.age;
- int i1= i==0? this.name.compareTo(o.name):i;
- return i1;
- }
- }

- package day27;
-
- import java.util.TreeSet;
-
- public class Test18 {
- public static void main(String[] args) {
- TreeSet<Student> students = new TreeSet<>();//创建TreeSet对象指定数据类型为Student
- //添加元素
- Student s1 = new Student(18, "小花");
- Student s2 = new Student(17, "小明");
- Student s3 = new Student(19, "小可");
- Student s4 = new Student(20, "小良");
- Student s5 = new Student(22, "小亮");
- Student s6= new Student(19, "小花");
- Student s7 = new Student(17, "小明");
- //把学生对象添加到元素中
- students.add(s1);
- students.add(s2);
- students.add(s3);
- students.add(s4);
- students.add(s5);
- students.add(s6);
- students.add(s7);
- //增强for循环
- for (Student student : students) {
- System.out.println(student.getName()+"**"+student.getAge());
- }
- }
- }

- package day27;
-
- import java.util.Objects;
-
- public class Student{
- private int age;
- private String name;
-
- public Student(int age, String name) {
- this.age = age;
- this.name = name;
- }
-
- public Student() {
- }
-
- 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;
- }
-
- @Override
- public String toString() {
- return "Student{" +
- "age=" + age +
- ", name='" + name + '\'' +
- '}';
- }
-
- @Override
- public boolean equals(Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
- Student student = (Student) o;
- return age == student.age &&
- Objects.equals(name, student.name);
- }
-
- @Override
- public int hashCode() {
-
- return Objects.hash(age, name);
- }
-
-
- }

- package day27;
-
- import java.util.Comparator;
- import java.util.TreeSet;
-
- public class Test19 {
- public static void main(String[] args) {
- TreeSet<Student> students = new TreeSet<>(new Comparator<Student>() {
- //用匿名内部类形式实现Comparator重写compare方法
- @Override
- public int compare(Student o1, Student o2) {
- //判断年龄是否一样,一样再进行判断姓名
- int i = o2.getAge()-o1.getAge();
- int i1 = i==0? o2.getName().compareTo(o1.getName()):i;
- return i1;
- }
- });
- Student s1 = new Student(18, "小花");
- Student s2 = new Student(17, "小明");
- Student s3 = new Student(19, "小可");
- Student s4 = new Student(20, "小良");
- Student s5 = new Student(22, "小亮");
- Student s6= new Student(19, "小花");
- Student s7 = new Student(17, "小明");
- //把学生对象添加到元素中
- students.add(s1);
- students.add(s2);
- students.add(s3);
- students.add(s4);
- students.add(s5);
- students.add(s6);
- students.add(s7);
- for (Student student : students) {
- System.out.println(student.getName()+"**"+student.getAge());
- }
- }
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。