【无标题】

TreeSet集合的特点

TreeSet<Integer> valid = new TreeSet<>(); 这行代码创建了一个 TreeSet 集合,用于存储 Integer 类型的数据。以下是 TreeSet 集合的一些特点:

  1. 有序性TreeSet 中的元素是有序的,默认按照元素的自然顺序进行排序。也可以在创建 TreeSet 时传入自定义的比较器来进行排序。

  2. 唯一性TreeSet 不允许存储重复元素。当尝试添加重复元素时,新元素不会被添加到集合中。

  3. 查询效率:由于底层红黑树的特性,TreeSet 可以快速地进行插入、删除和查询操作,这些操作的时间复杂度为 O(log n)。

  4. 不是线程安全的TreeSet 不是线程安全的,如果多个线程同时访问一个 TreeSet,并且至少有一个线程对其进行了修改,则必须通过外部同步手段来保证线程安全。

  5. 存储对象要实现 Comparable 接口或传入自定义比较器:为了进行元素的排序和去重,TreeSet 中存储的元素要么实现 Comparable 接口来定义自然排序规则,要么在创建 TreeSet 时传入自定义的 Comparator 来定义排序规则。

  6. 迭代顺序TreeSet 的迭代顺序按照元素的排序顺序进行,这是由底层红黑树的结构决定的。

  7. 导航性TreeSet 实现了 NavigableSet 接口,提供了诸如 first()last()lower()higher() 等导航方法,用于精确定位元素。

这些特点使得 TreeSet 在需要有序集合且频繁进行查找操作的场景中非常适用。

在java中想要实现一个类,这个存在一个集合中,然后当我使用这个集合中的sort方法的时候 ,我希望这个集合里面的元素可以按照我希望的方式进行排序,这个时候就需要在这个类接入comparable<?>接口,来定义自己需要的规则。

当接入comparable接口的时候就需要重写compareTo方法。

ceiling方法和floor方法

在Java中,TreeSet 类提供了 ceilingfloor 方法,它们用于在有序集合中查找特定元素的上下界。

  1. ceiling 方法TreeSet 类的 ceiling(E e) 方法返回集合中大于或等于给定元素 e 的最小元素。如果没有这样的元素,方法将返回 null。这个方法通常用于找到集合中某个值的最小上界。

  2. floor 方法TreeSet 类的 floor(E e) 方法返回集合中小于或等于给定元素 e 的最大元素。如果没有这样的元素,方法也将返回 null。这个方法通常用于找到集合中某个值的最大下界。

在你提供的代码片段中:

  • Integer higher = valid.ceiling(event.id); 这行代码是在 valid 这个 TreeSet 集合中查找大于或等于 event.id 的最小元素,并将结果赋值给 higher 变量。
  • Integer lower = valid.floor(event.id); 这行代码是在 valid 这个 TreeSet 集合中查找小于或等于 event.id 的最大元素,并将结果赋值给 lower 变量。

Integer,compare方法的使用

Integer.compare(this.age, that.age) 是 Java 中的一个静态方法,用于比较两个 int 值的大小。这个方法接受两个参数,分别是 this.agethat.age,并按照以下规则返回结果:

  1. 正数:如果 this.age 大于 that.age,则返回一个正整数。这个正整数的具体值通常是 1,但 Java 规范并没有指定必须返回 1,它只需要是一个正整数即可。

  2. 0:如果 this.age 等于 that.age,则返回 0。

  3. 负数:如果 this.age 小于 that.age,则返回一个负整数。这个负整数的具体值通常是 -1,但同样,Java 规范并没有指定必须返回 -1,它只需要是一个负整数即可。

这个方法的实现保证了比较的一致性,即对于任何非负整数 xyz,以下条件总是成立:

  • Integer.compare(x, y) < 0 当且仅当 x < y
  • Integer.compare(x, y) == 0 当且仅当 x == y
  • Integer.compare(x, y) > 0 当且仅当 x > y
  • Integer.compare(x, y) 与 Integer.compare(y, x) 的符号相反
  • Integer.compare(x, y) * Integer.compare(y, z) * Integer.compare(z, x) > 0(即,比较的结果是传递性的)

Integer.compare 方法是 Comparator 接口的一个实现,它提供了一种类型安全的方式来比较 int 值,并且在需要比较整数时,可以避免手动编写比较逻辑,使得代码更加简洁和易于理解。

使用Integer.compare来对一个集合进行升序和降序的设置

如果是return compare(that,?,this.?);
这个就是代表降序

如果是return compare(this.?,that.?);
这个就是代表升序

口诀:this在前就是升,this在后就是降

 对一个集合进行排序

如果在写的类中已将接上了Comparable接口的话,那么直接使用

Collections.sort(events);

 将一个数组中的元素全部变成一个数组

就使用(注:这个ans是一个int [] ans = new int [] 的数组 )

 Arrays.fill(ans, -1);

这样就将这个数组里面的全部元素变成-1。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白色的风扇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值