草庐IT

comparing

全部标签

java - Comparable 应该与另一种类型进行比较吗?

我想知道以下是否有有效的用例:classBase{}classAimplementsComparable{//...}接受T类型的集合似乎是一种常见的模式(参见Collections中的许多示例),其中TextendsComparable.但compareTo()的契约(Contract)在技术上似乎无法履行与基类进行比较时,因为无法确保另一个类不会通过矛盾的比较来扩展基类。考虑以下示例:classBase{finalintfoo;Base(intfoo){this.foo=foo;}}classAextendsBaseimplementsComparable{A(intfoo){su

Java 接口(interface)扩展 Comparable

我想要一个接口(interface)A由T参数化A,并且还希望实现它的每个类也实现Comparable(带有T及其子类型)。写成interfaceAextendsComparable似乎很自然,但这不起作用。那我该怎么办呢? 最佳答案 当Comparable出现这意味着你有一个Comparable的实例可以与T的一个(未知)子类型进行比较,并不是说它可以与T的任何子类型相比较。但你不需要那个,因为Comparable可以将自己与T的任何子类型进行比较无论如何,例如一个Comparable可以将自己与Comparable进行比较.所以

java - 带有 Comparator<?> 参数的 TreeSet 构造函数

在Java’sdocumentationforitsclassTreeSet其中一个构造函数显示为具有以下header:TreeSet(Comparatorc)有人可以帮助解释为什么TreeSet有一个构造函数,它以比较器对象作为参数吗?我不知道为什么要这样做。 最佳答案 以上所有答案都是正确的,但我想补充一点,自定义比较器除了会产生不同的排序外,还会以不同的方式过滤值。由于Set的值是单义的,如果自定义Comparator返回两个值相同,则只有其中一个会出现在Set中:Sets=newTreeSet(newComparator()

Java流排序2个变量升序/降序

我想对seq1升序排序,seq2降序排序,所以我这样做:list=list.stream().sorted(comparing(AClass::getSeq1).thenComparing(AClass::getSeq2).reversed()).collect(toList());但是结果出来了,因为seq1和seq2都是降序排列的。我可以这样做来使seq1升序和seq2降序:sorted(comparing(AClass::getSeq1).reversed().thenComparing(AClass::getSeq2).reversed()真正正确的方法是什么?

Java中的比较器(Comparator)

Java中的比较器(Comparator)是一种对象,用于定义两个对象之间的比较规则。它是一个独立的类,实现了Comparator接口,通常用于对集合中的元素进行排序。Comparator接口中有一个compare()方法,它接受两个对象作为参数,并返回一个int值,表示它们的顺序。下面是一个简单的例子,展示了如何使用比较器对一个字符串列表进行排序:importjava.util.*;publicclassStringComparatorimplementsComparator{  publicintcompare(Strings1,Strings2){    returns1.compare

java - AtomicInteger 中的 "Compare And Set"如何工作

AtomicInteger使用两个概念:CAS和volatile变量。使用volatile变量确保当前值对所有线程可见,并且不会被缓存。但是我对下面解释的CAS(比较和设置)概念感到困惑:publicfinalintgetAndIncrement(){for(;;){intcurrent=get();intnext=current+1;if(compareAndSet(current,next))returncurrent;}}我的问题是什么if(compareAndSet(current,next)返回false?这个值不会更新吗?在这种情况下,当线程执行以下情况时会发生什么:pri

java - 嵌套字段的 Comparator.comparing(...)

假设我有一个像这样的领域模型:classLecture{Coursecourse;...//getters}classCourse{Teacherteacher;intstudentSize;...//getters}classTeacher{intage;...//getters}现在我可以像这样创建一个教师比较器:returnComparator.comparing(Teacher::getAge);但是我该如何比较Lecture的嵌套字段,就像这样?returnComparator.comparing(Lecture::getCourse::getTeacher:getAge).

java - 为什么 Arrays.sort 采用 Object[] 而不是 Comparable[]?

我想知道为什么Arrays类的排序方法要求一个Object[]类型的参数。为什么参数不是Comparable[]类型。如果您不传递Comparable[],则会生成ClassCastException。为什么...publicstaticvoidsort(Object[]a)而不是publicstaticvoidsort(Comparable[]a)?谢谢 最佳答案 因为第二种形式需要重新分配数组。即使您知道您的数组仅包含可比较项,如果原始类型为Object[],您也不能将其强制转换为Comparable[],因为数组类型不匹配。你

java - 为实现 Comparable 的泛型类创建一个 compareTo

我有一个带有两个类型变量的通用类,它实现了java.lang.Comparable。publicclassDoubleKeyimplementsComparable>{privateKkey1;privateJkey2;publicDoubleKey(Kkey1,Jkey2){this.key1=key1;this.key2=key2;}publicKgetFirstKey(){returnthis.key1;}publicJgetSecondKey(){returnthis.key2;}//needforComparableinterfacepublicintcompareTo(Do

Java:要在充满自定义对象的 ArrayList 中使用包含,我应该覆盖 equals 还是实现 Comparable/Comparator?

我有一个包含这些的ArrayList:classTransitionState{PositionpositionA;PositionpositionB;intcounter;publicbooleanequals(Objecto){if(oinstanceofTransitionState){TransitionStatetransitionState=(TransitionState)o;if((this.positionA.equals(transitionState.positionA))&&(this.positionB.equals(transitionState.posit