【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底层二叉树遍历是按照升序的结果出现的,这个升序是靠终须遍历得到的:
标签:name,实现,ts,add,Student,使用,public,TreeSet From: https://www.cnblogs.com/jeldp/p/16848365.html