Java中的TreeSet 【案例+理论】
程序员文章站
2022-06-24 12:26:16
TreeSet:基于排列顺序实现元素不重复。实现SortedSet接口,对集合元素自动排序。元素对象的类型必须实现Comparable接口,指定排序规则。通过ComparTo确定是否为重复元素。案例/** TreeSet* 存储结构:红黑树* 要求:元素必须要实现Comparable 接口* */public class TestTreeSetEntity { public static void main(String[] args) {...
TreeSet:
-
基于排列顺序实现元素不重复。
-
实现SortedSet接口,对集合元素自动排序。
-
元素对象的类型必须实现Comparable接口,指定排序规则。
-
通过ComparTo确定是否为重复元素。
-
案例
/* * TreeSet * 存储结构:红黑树 * 要求:元素必须要实现Comparable 接口 * */ public class TestTreeSetEntity { public static void main(String[] args) { //创建集合 TreeSet<Student> students = new TreeSet<>(); //1.添加元素 Student s = new Student("xccc", 22); Student s1 = new Student("accc", 21); Student s2 = new Student("bcc", 20); Student s3 = new Student("bcc", 27); students.add(s); students.add(s1); students.add(s2); students.add(s3); System.out.println("元素个数"+students.size()); System.out.println(students.toString()); //2.删除元素 // students.remove(new Student("xccc", 22)); // students.clear(); // System.out.println("元素个数"+students.size()); // System.out.println(students.toString()); //3.遍历元素 System.out.println("-----------增强for循环-------------"); for (Student student : students) { System.out.println(student); } System.out.println("----------------迭代器-------------------"); Iterator it=students.iterator(); while (it.hasNext()){ System.out.println(it.next()); } //4.判断 System.out.println(students.contains(new Student("bcc", 27))); System.out.println(students.isEmpty()); } }
实现类
public class Student implements Comparable<Student> { //定义两个属性 private String name; private int age; //定义 get set 方法 和有参无参构造 public String getName() { return name; } public int getAge() { return age; } public void setName(String name) { this.name = name; } public void setAge(int age) { this.age = age; } public Student(String name, int age) { this.name = name; this.age = age; } public Student() { } @Override public boolean equals(Object obj) { //1.判断两个对象是否是同一个引用。 if(this==obj){ return true; } //2.判断obj是否为null if (obj==null){ return false; } //判断是否是同一个类型 使用instanceof if (obj instanceof Student){ //强制类型转换 Student s=(Student)obj; //比较数据 if (this.name.equals(s.getName())&& this.age==s.getAge()){ return true; } } return false; } protected void finalize() throws Throwable { System.out.println(this.name+"对象被回收了"); } @Override public String toString() { return "Student{" + "name='" + name + '\'' + ", age=" + age + '}'; } public int hashCode(){ int n1=this.name.hashCode(); int n2=this.age; return n1+n2; } //要想使用TreeSet方法 必须先继承Comparable接口 然后重写compareTo()方法 //先比较姓名 如果相等 比较年龄 @Override public int compareTo(Student o) { int n1=this.getName().compareTo(o.getName()); int n2=this.age-o.getAge(); return n1==0?n2:n1; } }
本文地址:https://blog.csdn.net/qq_45162683/article/details/110933889