TreeSet实现类使用
【1】存入Integer类型数据(底层用的是内部比较器)
package com.msb.test09; import java.util.TreeSet; /** * @author : liu * 日期:16:09:57 * 描述:IntelliJ IDEA * 版本:1.0 */ public class Test01 { //这是一个main方法:是程序的入口 public static void main(String[] args) { //创建一个TreeSet: TreeSet<Integer> ts=new TreeSet<>(); ts.add(12); ts.add(3); ts.add(7); ts.add(9); ts.add(3); ts.add(16); System.out.println(ts.size()); System.out.println(ts); } }
特点:唯一,无序(没有按照输入顺序进行输出),有序(按照升序进行遍历)
【2】原理:底层:二叉树(数据结构中的一个逻辑结构)
【3】存入String类型数据(底层实现了内部比较器)
package com.msb.test09; import java.util.TreeSet; /** * @author : liu * 日期:16:22:37 * 描述:IntelliJ IDEA * 版本:1.0 */ public class Test02 { //这是一个main方法:是程序的入口 public static void main(String[] args) { TreeSet<String> ts=new TreeSet<>(); ts.add("elili"); ts.add("blili"); ts.add("alili"); ts.add("elili"); ts.add("clili"); ts.add("flili"); ts.add("glili"); System.out.println(ts.size()); System.out.println(ts); } }
【4】想放入自定义的Student类型数据
(1)利用内部比较器
package com.msb.test09; /** * @author : liu * 日期:16:27:51 * 描述:IntelliJ IDEA * 版本:1.0 */ public class Student implements Comparable<Student>{ private int age; private String name; 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; } public Student(int age, String name) { this.age = age; this.name = name; } @Override public String toString() { return "Student{" + "age=" + age + ", name='" + name + '\'' + '}'; } @Override public int compareTo(Student o) { return this.getAge()-o.getAge(); } }
package com.msb.test09; import java.util.TreeSet; /** * @author : liu * 日期:16:09:57 * 描述:IntelliJ IDEA * 版本:1.0 */ public class Test01 { //这是一个main方法:是程序的入口 public static void main(String[] args) { //创建一个TreeSet: TreeSet<Integer> ts=new TreeSet<>(); ts.add(12); ts.add(3); ts.add(7); ts.add(9); ts.add(3); ts.add(16); System.out.println(ts.size()); System.out.println(ts); } }
(2)内部比较器
package com.msb.test09; import java.util.Comparator; /** * @author : liu * 日期:16:27:51 * 描述:IntelliJ IDEA * 版本:1.0 */ public class Student { private int age; private String name; 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; } public Student(int age, String name) { this.age = age; this.name = name; } @Override public String toString() { return "Student{" + "age=" + age + ", name='" + name + '\'' + '}'; } } class BiJiao implements Comparator<Student>{ @Override public int compare(Student o1, Student o2) { return o1.getName().compareTo(o2.getName()); } public BiJiao() { } }
package com.msb.test09; import java.util.Comparator; import java.util.TreeSet; /** * @author : liu * 日期:16:30:56 * 描述:IntelliJ IDEA * 版本:1.0 */ public class Test03 { //这是一个main方法:是程序的入口 public static void main(String[] args) { //创建一个TreeSet //利用外部比较器,必须自己指定: Comparator<Student> com= new BiJiao(); TreeSet<Student> ts=new TreeSet<>(com);//一旦指定外部比较器,那么就会按照外部比较器来比较 ts.add(new Student(10,"elili")); ts.add(new Student(8,"blili")); ts.add(new Student(4,"alili")); ts.add(new Student(9,"clili")); ts.add(new Student(10,"elili")); ts.add(new Student(1,"dlili")); System.out.println(ts.size()); System.out.println(ts); } }
实际开发中利用外部比较器多,因为扩展性好(多态)
换一种写法:
package com.msb.test09; import java.util.Comparator; import java.util.TreeSet; /** * @author : liu * 日期:16:30:56 * 描述:IntelliJ IDEA * 版本:1.0 */ public class Test03 { //这是一个main方法:是程序的入口 public static void main(String[] args) { //创建一个TreeSet //利用外部比较器,必须自己指定: /* Comparator<Student> com= new Comparator<Student>() {//匿名内部类 @Override public int compare(Student o1, Student o2) { return o1.getName().compareTo(o2.getName()); } };*/ TreeSet<Student> ts=new TreeSet<>(new Comparator<Student>() {//匿名内部类 @Override public int compare(Student o1, Student o2) { return o1.getName().compareTo(o2.getName()); } });//一旦指定外部比较器,那么就会按照外部比较器来比较 ts.add(new Student(10,"elili")); ts.add(new Student(8,"blili")); ts.add(new Student(4,"alili")); ts.add(new Student(9,"clili")); ts.add(new Student(10,"elili")); ts.add(new Student(1,"dlili")); System.out.println(ts.size()); System.out.println(ts); } }
【5】TreeSet底层二叉树遍历是按照升序的结果出现的,这个升序是靠终须遍历得到的:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本