当前位置: 首页 > news >正文

【java学习—十】TreeSet集合(5)

文章目录

  • 1. TreeSet
    • 1.1. 自然排序
    • 1.2. 定制排序


1. TreeSet

    TreeSet 是 SortedSet 接口的实现类, TreeSet 可以确保集合元素处于排序状态。
    TreeSet 支持两种排序方法:自然排序定制排序。默认情况下, TreeSet 采用自然排序。

在这里插入图片描述

1.1. 自然排序

    默认情况下, TreeSet 采用自然排序。自然排序: TreeSet 会调用集合元素的 compareTo(Object obj) 方法来比较元素之间的大小关系,然后将集合元素按升序排列:
    • 如果 this > obj, 返回正数 1
    • 如果 this < obj, 返回负数 -1
    • 如果 this = obj, 返回 0 ,则认为这两个对象相等
    • 必须放入同样类的对象 ,( 默认会进行排序 ) 否则可能会发生类型转换异常 ,可以使用泛型来进行限制。

举例:

package day10;import java.util.Set;
import java.util.TreeSet;public class Test4 {public static void main(String[] args) {Set<Integer> set = new TreeSet<Integer>();//TreeSet自然排序set.add(5);set.add(2);set.add(4);set.add(3);System.out.println(set);}
}

运行结果:
在这里插入图片描述
举例2:实现其他功能

package day10;import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;public class Test4 {public static void main(String[] args) {Set<Integer> set = new TreeSet<Integer>();set.add(5);set.add(2);set.add(4);set.add(3);System.out.println(set);set.remove(5);set.contains(3);
//		set.clear();//清空集合//使用迭代器遍历集合Iterator<Integer> it = set.iterator();while(it.hasNext()) {System.out.println(it.next());}//for each迭代集合,推荐这种for(Integer i : set) {System.out.println(i);}}
}

1.2. 定制排序

    如果需要实现定制排序,则需要在创建 TreeSet 集合对象时,提供一个 Comparator 接口的实现类对象。由该 Comparator对象负责集合元素的排序逻辑。

举例:

package day10;import java.util.Comparator;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;public class Test4 {public static void main(String[] args) {Person p1 = new Person("张三", 23);Person p2 = new Person("李四", 20);Person p3 = new Person("王五", 16);Person p4 = new Person("杨六", 29);Set<Person> set = new TreeSet<Person>(new Person());set.add(p1);set.add(p2);set.add(p3);set.add(p4);//for each迭代集合for(Person p : set) {System.out.println(p.name + " " + p.age);}}
}class Person implements Comparator<Person>{//把person对象存到TreeSet中并按照年龄排序int age;String name;public Person() {}public Person(String name, int age) {this.name = name;this.age = age;}@Overridepublic int compare(Person o1, Person o2) {//年龄正序排列if(o1.age > o2.age) {return 1;}else if(o1.age < o2.age) {return -1;}else {return 0;}	}}

运行结果:

在这里插入图片描述

http://www.lryc.cn/news/211385.html

相关文章:

  • JMeter的使用,傻瓜式学习【上】
  • 主定理(一般式)
  • WLAN的组网架构和工作原理
  • 使用OBS Browser+访问华为云OBS存储【Windows】
  • C++总结(3):类的动态内存分配、异常、类型转换运算符
  • 折半搜索(meet in the middle)
  • 【机器学习】loss损失讨论
  • LeetCode 779. 第K个语法符号【递归,找规律,位运算】中等
  • java try throw exception finally 遇上 return break continue造成异常丢失
  • 设计模式——装饰器模式(Decorator Pattern)+ Spring相关源码
  • MATLAB R2018b详细安装教程(附资源)
  • GEE错误——影像加载过程中出现的图层无法展示的解决方案
  • 读图数据库实战笔记03_遍历
  • QT如何检测当前系统是是Windows还是Uninx或Mac?以及是哪个版本?
  • Maven配置阿里云中央仓库settings.xml
  • 由浅入深C系列八:如何高效使用和处理Json格式的数据
  • 多媒体应用设计师 第16章 多媒体应用系统的设计和实现示例
  • golang平滑重启库overseer实现原理
  • 用Python定义一个函数,用递归的方式模拟汉诺塔问题
  • 二手的需求
  • 大厂面试题-JVM为什么使用元空间替换了永久代?
  • 基本微信小程序的驾校宝典系统-驾照考试系统
  • 02、SpringCloud -- Redis和Cookie过期时间刷新功能
  • 【报错】kali安装ngrok报错解决办法(zsh: exec format error: ./ngrok)
  • <学习笔记>从零开始自学Python-之-常用库篇(十三)内置小型数据库shelve
  • Redis快速上手篇七(集群-六台虚拟机)
  • LeetCode 301. 删除无效的括号【字符串,回溯或BFS】困难
  • 面试经典159题——Day25
  • C# OpenCvSharp DNN 部署L2CS-Net人脸朝向估计
  • Windows环境下MosQuitto服务器搭建,安装mqtt服务端软件