TreeSet集合的特点
TreeSet<Integer> valid = new TreeSet<>(); 这行代码创建了一个 TreeSet 集合,用于存储 Integer 类型的数据。以下是 TreeSet 集合的一些特点:
-
有序性:
TreeSet中的元素是有序的,默认按照元素的自然顺序进行排序。也可以在创建TreeSet时传入自定义的比较器来进行排序。 -
唯一性:
TreeSet不允许存储重复元素。当尝试添加重复元素时,新元素不会被添加到集合中。 -
查询效率:由于底层红黑树的特性,
TreeSet可以快速地进行插入、删除和查询操作,这些操作的时间复杂度为 O(log n)。 -
不是线程安全的:
TreeSet不是线程安全的,如果多个线程同时访问一个TreeSet,并且至少有一个线程对其进行了修改,则必须通过外部同步手段来保证线程安全。 -
存储对象要实现 Comparable 接口或传入自定义比较器:为了进行元素的排序和去重,
TreeSet中存储的元素要么实现Comparable接口来定义自然排序规则,要么在创建TreeSet时传入自定义的Comparator来定义排序规则。 -
迭代顺序:
TreeSet的迭代顺序按照元素的排序顺序进行,这是由底层红黑树的结构决定的。 -
导航性:
TreeSet实现了NavigableSet接口,提供了诸如first()、last()、lower()和higher()等导航方法,用于精确定位元素。
这些特点使得 TreeSet 在需要有序集合且频繁进行查找操作的场景中非常适用。
在java中想要实现一个类,这个存在一个集合中,然后当我使用这个集合中的sort方法的时候 ,我希望这个集合里面的元素可以按照我希望的方式进行排序,这个时候就需要在这个类接入comparable<?>接口,来定义自己需要的规则。
当接入comparable接口的时候就需要重写compareTo方法。
ceiling方法和floor方法
在Java中,TreeSet 类提供了 ceiling 和 floor 方法,它们用于在有序集合中查找特定元素的上下界。
-
ceiling 方法:
TreeSet类的ceiling(E e)方法返回集合中大于或等于给定元素e的最小元素。如果没有这样的元素,方法将返回null。这个方法通常用于找到集合中某个值的最小上界。 -
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.age 和 that.age,并按照以下规则返回结果:
-
正数:如果
this.age大于that.age,则返回一个正整数。这个正整数的具体值通常是 1,但 Java 规范并没有指定必须返回 1,它只需要是一个正整数即可。 -
0:如果
this.age等于that.age,则返回 0。 -
负数:如果
this.age小于that.age,则返回一个负整数。这个负整数的具体值通常是 -1,但同样,Java 规范并没有指定必须返回 -1,它只需要是一个负整数即可。
这个方法的实现保证了比较的一致性,即对于任何非负整数 x、y 和 z,以下条件总是成立:
Integer.compare(x, y) < 0当且仅当x < yInteger.compare(x, y) == 0当且仅当x == yInteger.compare(x, y) > 0当且仅当x > yInteger.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。
4254

被折叠的 条评论
为什么被折叠?



