文章目录

  • 1.Set集合
    • 1.1 Set集合概述和特点【应用】
    • 1.2 Set集合的使用 【应用】
  • 2.TreeSet集合
    • 2.1TreeSet集合概述和特点【应用】
    • 2.2 TreeSet集合基本使用【应用】
    • 2.3 自然排序 Comparable 的【使用】
    • 2.4 比较器排序 Comparator 的使用【应用】
    • 2.5 两种比较方式总结【理解】
      • 2.5.1两种比较方式小结
      • 2.5.2 两种方式中关于返回值的规则

1.Set集合

1.1 Set集合概述和特点【应用】

   不可以存储重复元素没有索引,不能使用普通 for 循环遍历

1.2 Set集合的使用 【应用】

存储字符串并遍历

public class MySet1{public static void main(String[]args){//创建集合对象Set<String> set = new TreeSet<>();//添加元素set.add("ccc");set.add("aaa");set.add("aaa");set.add("bbb");//    for(int i = 0; i < set.size();i++) {//Set集合是没有索引的,所以不能使用通过索引获取元素的方法// }//使用迭代器的方法遍历集合Iterator<String> it = set.iterator();while(it.hasNext()){String s = it.next();System.out.println(s);}System.out.println("=============");//增强forfor(String s:set){System.out.println(s);}}
}

2.TreeSet集合

2.1TreeSet集合概述和特点【应用】

不可以存储重复的元素
没有索引
因为 TreeSet 集合存和取不一致,所以在当遍历的集合元素是自定义数据类型时,必须定义排序规则,不然程序会报错
TreeSet():根据其元素的自然排序进行排序
TreeSet(Comperator comperator):根据指定的比较器进行排序

2.2 TreeSet集合基本使用【应用】

存储Integer类型的整数并遍历

public class TreeSetDemo01 {public static void main(String[] args) {//创建集合对象TreeSet<Integer> ts = new TreeSet<Integer>();//添加元素ts.add(10);ts.add(40);ts.add(30);ts.add(50); ts.add(20); ts.add(30); //遍历集合for(Integer i : ts) {System.out.println(i);}}
}

2.3 自然排序 Comparable 的【使用】

案例需求
1.存储学生对象并遍历,创建TreeSet集合使用无参构造方法。
2.要求:按照年龄从小到大排序,年龄相同时,按照姓名的字母顺序排序
实现步骤
1. 使用空参构造创建TreeSet集合 用TreeSet集合存储自定义对象,无参构造方法使用的是自然排序对元素进行排序的。
2. 自定义的Student类实现Comparable接口 自然排序,就是让元素所属的类实现Comparable接口,重写compareTo(T o)方法。
3. 重写接口中的compareTo方法 重写方法时,一定要注意排序规则必须按照要求的主要条件和次要条件来写。
代码实现
学生类

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;}@Override public String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age + '}'; }@Override public int compareTo(Student o) {//按照对象的年龄进行排序 //主要判断条件: 按照年龄从小到大排序 int result = this.age ‐ o.age;//次要判断条件: 年龄相同时,按照姓名的字母顺序排序result = result == 0 ? this.name.compareTo(o.getName()) : result;//这里的 compareTo()方法是String类里边的,作用是让名字按字典顺序排序。                   return result; }}

测试类

public class MyTreeSet2 {public static void main(String[] args) {//创建集合对象 TreeSet<Student> ts = new TreeSet<>();//创建学生对象 Student s1 = new Student("zhangsan",28);Student s2 = new Student("lisi",27);Student s3 = new Student("wangwu",29);Student s4 = new Student("zhaoliu",28); Student s5 = new Student("qianqi",30); //把学生添加到集合ts.add(s1); ts.add(s2); ts.add(s3); ts.add(s4); ts.add(s5); //遍历集合 for (Student student : ts) { System.out.println(student); } }
}

2.4 比较器排序 Comparator 的使用【应用】

案例需求
存储老师对象并遍历,创建TreeSet集合使用带参构造方法
要求:按照年龄从小到大排序,年龄相同时,按照姓名的字母顺序排序
实现步骤
用TreeSet集合存储自定义对象,带参构造方法使用的是比较器排序对元素进行排序的
比较器排序,就是让集合构造方法接收Comparator的实现类对象,重写compare(T o1,T o2)方法
重写方法时,一定要注意排序规则必须按照要求的主要条件和次要条件来写
代码实现
老师类

public class Teacher {private String name; private int age; public Teacher() {}public Teacher(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;}@Override public String toString() {return "Teacher{" + "name='" + name + '\'' + ", age=" + age + '}'; }
}

测试类

public class MyTreeSet4 { public static void main(String[] args) { //创建集合对象 TreeSet<Teacher> ts = new TreeSet<>(new Comparator<Teacher>() {@Override public int compare(Teacher o1, Teacher o2) { //o1表示现在要存入的那个元素 //o2表示已经存入到集合中的元素 //主要条件 int result = o1.getAge() ‐ o2.getAge(); //次要条件 result = result == 0 ? o1.getName().compareTo(o2.getName()) :             result; return result; } }); //创建老师对象 Teacher t1 = new Teacher("zhangsan",23); Teacher t2 = new Teacher("lisi",22); Teacher t3 = new Teacher("wangwu",24); Teacher t4 = new Teacher("zhaoliu",24); //把老师添加到集合 ts.add(t1); ts.add(t2); ts.add(t3); ts.add(t4); //遍历集合 for (Teacher teacher : ts) { System.out.println(teacher); } }
}

2.5 两种比较方式总结【理解】

2.5.1两种比较方式小结

 自然排序: 自定义类实现Comparable接口,重写compareTo方法,根据返回值进行排序比较器排序: 创建TreeSet对象的时候传递Comparator的实现类对象,重写compare方法,根据返回值进行 排序在使用的时候,默认使用自然排序,当自然排序不满足现在的需求时,必须使用比较器排序

2.5.2 两种方式中关于返回值的规则

 如果返回值为负数,表示当前存入的元素是较小值,存左边。如果返回值为0,表示当前存入的元素跟集合中元素重复了,不存。如果返回值为正数,表示当前存入的元素是较大值,存右边。

注意
TreeSet的底层实现是红黑树结构,我们后边再讲。

三更灯火五更鸡,正是男儿读书时相关推荐

  1. PAT A1155 Heap Paths ——三更灯火五更鸡?

    PAT A1155 Heap Paths 判断大小堆or not,并输出顶点到叶子的所有路径,右边的优先(dfs先递归右子树) 层序是堆的好搭档,为方便计算,下标从1开始.输入后比较前两个元素(即顶点 ...

  2. 若有恒,何必三更眠五更起;最无益,莫过一日曝十日寒

    若有恒,何必三更眠五更起:最无益,莫过一日曝十日寒. --这是明代学者胡居仁自勉联,凸现出先贤刻苦攻读.持之以恒,并注重科学学习方法的治学经验. 颜真卿的是"三更灯火五更鸡,正是男儿读书时. ...

  3. 贵有恒,何必三更起五更眠;最无益,只怕一日曝十日寒

    /*我从2012年开始走向程序员之路!在此期间,有太多的迷茫. 今年已经是2015年了,今天与大家共勉一句使我在这条路上坚持下来的名言: 贵有恒,何必三更起五更眠:最无益,只怕一日曝十日寒. */ # ...

  4. 贵有恒,何必三更眠五更起;最无益,莫过一日暴十日寒。

    两年多前的一个夜晚,如许多热血沸腾年轻气盛的码农一般,默默下了一个决心,就是要在Android编程技术方面一条道走到黑. 也确实付出了一些行动.比如经常在宿舍熬夜到一两点,解决白天在工作中遇到的难题, ...

  5. 贵有恒,何必三更起五更睡;最无益,只怕一日曝十日寒。

    贵有恒,何必三更起五更睡:最无益,只怕一日曝十日寒. 像悟空一样成长 内功:基本素质要好 内功深厚猜能拿得工具 eg:孙悟空修炼的神通 数据结构与算法:学习方法:审题->思考->表达-&g ...

  6. 本实例要求输出名言“贵有恒,何必三更起五更睡:最无益,只怕一日曝十日寒。

    #include <stdio.h> int main() { printf("贵有恒,何必三更起五更睡:最无益,只怕一日曝十日寒."); return 0; }

  7. 若有恒,何必三更眠五更起;最无益,莫过一日曝十日寒。

    上联的大意是:做任何事情,如果有恒心,就没必要起早贪黑地去干,工到自然成. 下联的大意是:对事业.工作最没有益处的是没有恒心.不坚持,三天打渔,两天晒网.

  8. 使用printf语句输出名言:“贵有恒,何必三更起五更睡:最无益,只怕一日曝十日寒。“

  9. 实例003输出名言 实例说明 是否能够成为真正的编程高手,主要是在于是否有毅力坚持学习和练习。本实例要求输出名言“贵有恒,何必三更起五更睡:最无益,只怕一日曝十日寒。”主要是想让读者激励自己,坚持学习

最新文章

  1. Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT.
  2. 利用rank函数实现自动排序
  3. Web应用程序体系结构– Spring MVC – AngularJs堆栈
  4. STM32CubeMx HAL库使用硬件IIC读写AT24C02
  5. [APUE]进程控制(中)
  6. 二叉链表和职工管理系统结合_职工信息管理系统单链表实现C语言源程序
  7. Futter基础第18篇: 实现调用原生时间选择器、日期选择器、时间戳、Future异步
  8. Illustrator中文版教程,如何在 Illustrator 中添加文字?
  9. 基于Python的豆瓣中文影评差评分析
  10. 计算机体系结构多处理器性能评价指标——加速比
  11. vue+element-ui 实现上传前图片压缩功能
  12. Android软键盘弹不出的问题
  13. 四巫日来临本周硅铁、铁矿石领跌,铁矿石认沽最高31倍,钢厂利润回升2022.6.17
  14. DPU网络开发SDK—DPDK(七)
  15. 保护模式(四)长调用与短调用 调用门
  16. quectel模块增加发送功率流程
  17. 标准印章公章制作软件附使用教程
  18. odoo列表字段颜色,行颜色,many2many_tags颜色,看板颜色
  19. 计算方法 4.线性方程组解法(2)
  20. 群体遗传学-选择清除分析基本概念及参数

热门文章

  1. centos安装gcc的方法
  2. [windows] 半开连接数
  3. 【笔记】linux文件权限与目录配置
  4. 二本考生考研复试331分逆袭390分上岸,被传教务处长之子?校方回应!
  5. 什么是跨境电商ERP?
  6. uniapp聊天框滚动到底部(简单高效)
  7. Qt Designer设置背景以及背景图片
  8. 超参数调试、Batch正则化
  9. python decode函数的用法_decode函数的用法
  10. 【源码】在线单纯形搜索的Nelder-Mead优化仿真