集合--TreeSet类比较器排序的实现方式及如何保证元素的排序和唯一性
比较器排序的实现方式
public class Student2 {private String name;private int age;public Student2() {}public Student2(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;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +'}';}
}import java.util.Comparator;//方式1:自己创建一个类实现Comparator接口public class MyComparetor implements Comparator<Student2> {@Overridepublic int compare(Student2 o1, Student2 o2) {//题目要求:按照姓名的长度进行排序int i = o1.getName().length() - o2.getName().length();//姓名长度一样不代表姓名的内容一样int i2 = i == 0 ? o1.getName().compareTo(o2.getName()) : i;//姓名的长度和内容一样,但是年龄可能不一样//只有当姓名和年龄都一样的时候,才能判断是同一个人int i3 = i2 == 0 ? o1.getAge()-o2.getAge() : i2;return i3;}
}import java.util.Comparator;
import java.util.TreeSet;/*根据创建 set 时提供的 Comparator 进行排序具体取决于使用的构造方法。*/
public class TreeSetDemo2 {public static void main(String[] args) {//方式1:通过匿名对象的方式传参
// TreeSet<Student2> ts = new TreeSet<Student2>(new MyComparetor());//方式2:通过匿名内部类的方式TreeSet<Student2> ts = new TreeSet<Student2>(new Comparator<Student2>() {@Overridepublic int compare(Student2 o1, Student2 o2) {//题目要求:按照姓名的长度进行排序int i = o1.getName().length() - o2.getName().length();//姓名长度一样不代表姓名的内容一样int i2 = i == 0 ? o1.getName().compareTo(o2.getName()) : i;//姓名的长度和内容一样,但是年龄可能不一样//只有当姓名和年龄都一样的时候,才能判断是同一个人int i3 = i2 == 0 ? o1.getAge()-o2.getAge() : i2;return i3;}});//创建学生对象Student2 s1 = new Student2("zhujiale",18);Student2 s2 = new Student2("caoxintao",17);Student2 s3 = new Student2("taohuagen",19);Student2 s4 = new Student2("zhangmi",16);Student2 s5 = new Student2("caoxintao",19);//将学生对象添加到集合ts.add(s1);ts.add(s2);ts.add(s3);ts.add(s4);ts.add(s5);for(Student2 s : ts){System.out.println(s);}}
}
TreeSet是如何保证元素的排序和唯一性的
import java.util.TreeSet;/*TreeSet是如何保证元素的排序和唯一性的底层数据结构是红黑树(红黑树是一种自平衡的二叉树)*/
public class TreeSetDemo3 {public static void main(String[] args) {TreeSet<Integer> ts = new TreeSet<>();ts.add(32);ts.add(18);ts.add(15);ts.add(24);ts.add(30);ts.add(32);ts.add(15);for(Integer i : ts){System.out.println(i);}}
}
TreeSet是如何保证元素的排序和唯一性的图解
习题
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;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +'}';}@Overridepublic int compareTo(Student 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;}
}import java.util.TreeSet;/*需求:使用TreeSet集合存储学生对象,根据姓名的长度进行排序
*/
public class TreeSetDemo {public static void main(String[] args) {TreeSet<Student> ts = new TreeSet<Student>();//创建学生对象Student s1 = new Student("zhujiale",18);Student s2 = new Student("caoxintao",17);Student s3 = new Student("taohuagen",19);Student s4 = new Student("zhangmi",16);Student s5 = new Student("caoxintao",19);//将学生对象添加到集合ts.add(s1);ts.add(s2);ts.add(s3);ts.add(s4);ts.add(s5);for(Student s : ts){System.out.println(s);}}
}
集合--TreeSet类比较器排序的实现方式及如何保证元素的排序和唯一性相关推荐
- 集合概述二(Set接口+HashSet集合+LinkedHashSet集合+TreeSet集合)
一(Set接口): 1.Set接口和List接口一样,同样继承自Collection接口,它与Collection接口中的方法基本一致,并没有对Collection接口进行功能上的扩充,只是比Coll ...
- Java技能树-集合-ArrayList类
1 需求 2 接口 Class ArrayList<E> public class ArrayList<E> extends AbstractList<E> imp ...
- Java基础知识 21(Set集合,HashSet集合以及它的三种遍历方式(迭代器,增强for循环,forEach),LinkedHashSet集合,TreeSet集合(自然排序法,比较器排序法))
Java基础知识 21 Set集合 Set集合:一个不包含重复元素的Collection集合,元素不重复,List集合是允许元素重复的. Set接口的三个字类:HashSet(),LinkedHash ...
- Java 集合之TreeSet 自定义类 比较器
Java 集合之TreeSet 基于 TreeMap 的 NavigableSet 实现. 使用元素的自然顺序进行排序,或者通过在集合创建时提供的 Comparator 进行排序,具体取决于使用的构造 ...
- 集合--Set集合--HashSet类、LinkedHashSet类、TreeSet类及其自然排序
Set集合 HashSet类 import java.util.HashSet;/*Set集合:元素唯一且元素无序(存储和取出顺序不一致)的集合HashSet类概述不保证 set 的迭代顺序特别是它不 ...
- 扑克牌自定义排序,使用集合TreeSet实现实体对象排序,通过实现Comparable接口,重写compareTo比较器;
一.继承Comparable实现排序 下面以扑克牌为例: 首先创建扑克实体类继承Comparable<Poker>接口: public class Poker implements Com ...
- JAVA集合四:比较器--类自定义排序
参考链接: HOW2J.CN 前言 对于JAVA集合,都能够用集合的工具类Collections 提供的方法: Collections.sort(List list) Collections.sort ...
- Java中的TreeSet集合会自动将元素升序排序
我们都知道,java中的集合可以分为这么两大类:Collection和Map ,其中Collection 接口中又可以派生出来两个接口,分别为:List和Set接口. 其中,Set下有HashSet, ...
- java treeset比较,java中TreeSet的两种排序比较的方式
第一种是使得元素具有比较性 第二种是让集合具有比较性 具体代码步骤如下: import java.util.*; /* * TreeSet:可以自动对对集合中的元素进行排序 * 第一种比较方式 * 步 ...
- 小汤学编程之JAVA基础day11——集合框架:List/Set/Map集合、Collections集合工具类、泛型、TreeMap和TreeSet
一.集合的特点 二.继承结构图 三.List集合 1.特点 2.ArrayList类 3.LinkedList类 4.两者的对比 5.集合的遍历 四.Set集合 1.特 ...
最新文章
- vue状态管理存取数据_vue状态管理vuex从浅入深详细讲解
- python读取 application_python PyQt5.QtWidgets.QApplication类(sys.argv)(app应用对象类)...
- redhat linux修改乱码
- Ubuntu 18的中文界面切换《图解教程》亲测成功
- 解决window的bat脚本执行出现中文乱码的问题
- BugkuCTF-WEB题矛盾
- Infographic Modern Graphs Mac(现代信息图表动画fcpx插件)
- Chrome 开发工具 Workspace 使用
- 苹果任命软件主管凯文•林奇为“苹果汽车”项目负责人
- 用js和jq分别实现二级联动效果
- 加速下载 玩转土豆网FLV视频四招
- moodle安装体验
- 系列4—BabeLua常见问题
- python 保存视频为图片
- 跟Nature学SCI图片高级配色
- win10升级补丁_官方win10教育版怎么样
- 过滤器(Filter)应用:全站压缩----Gzip网页压缩输出
- RFC 文档中文目录
- 如何将论文中的公式图片直接变为word中的公式
- 2020牛客寒假算法基础集训营3 B	牛牛的DRB迷宫II二进制详解