Tag: 可比

应该比较另一种类型吗?

我想知道以下是否有一个有效的用例: class Base {} class A implements Comparable { //… } 它似乎是一个常见的模式(参见许多例子的集合)来接受类型T的集合,其中T extends Comparable T extends Comparable 。 但是在比较基类时,在技术上似乎不可能完成compareTo()的约定,因为没有办法确保另一个类不会通过矛盾的比较来扩展基类。 请考虑以下示例: class Base { final int foo; Base(int foo) { this.foo = foo; } } class A extends Base implements Comparable { A(int foo) { super(foo); } public int compareTo(Base that) { return Integer.compare(this.foo, that.foo); // […]

Comparable.compareTo的返回值在Java中意味着什么?

在Java中的compareTo()中返回0 ,返回1和返回-1什么区别?

如何在Java中实现通用的`max(Comparable a,Comparable b)`函数?

我正在尝试编写一个通用的max函数,它需要两个Comparable s。 到目前为止我有 public static <T extends Comparable> T max(T a, T b) { if (a == null) { if (b == null) return a; else return b; } if (b == null) return a; return a.compareTo(b) > 0 ? a : b; } 这无法编译 The method compareTo(capture#5-of ?) in the type Comparable is not […]

Java错误:“比较方法违反了其总合同!”

我有这个代码: package org.optimization.geneticAlgorithm; import org.optimization.geneticAlgorithm.selection.Pair; public abstract class Chromosome implements Comparable { public abstract double fitness(); public abstract Pair crossover(Chromosome parent); public abstract void mutation(); public int compareTo(Chromosome o) { int rv = 0; if (this.fitness() > o.fitness()) { rv = -1; } else if (this.fitness() < o.fitness()) { rv = 1; } return rv; […]

Java中的可比较和比较器接口

我想写一个通用的Pair类,它有两个成员:key和value。 这个类的唯一要求是key和value都应该实现Comparable接口,否则Pair类不会接受它们作为类型参数。 首先,我这样编码: public class Pair 但是JDK 1.6编译器会生成关于此的警告: Comparable is a raw type. References to generic type Comparable should be parameterized 然后我尝试添加类型参数,现在代码如下所示: public class Pair<T1 extends Comparable, T2 extends Comparable> 现在一切顺利,直到我尝试为Pair生成Comparator。(以下代码在Pair类中) public final Comparator<Pair> KEY_COMPARATOR = new Comparator<Pair>() { public int compare(Pair first, Pair second) { *first.getKey().compareTo(second.getKey());* return 0; } }; 代码first.getKey().compareTo(second.getKey()); 会产生错误说: The method […]

Java,如果compareTo()返回0,为什么暗示对象是相等的?

我们有一个Person 。 人有名字和身高。 Equals和hashCode()仅考虑名称。 人是可比的(或者我们为它实施比较,无论哪一个)。 人员按身高进行比较。 期望两个不同的人可以具有相同高度的情况似乎是合理的,但是例如。 TreeSet的行为类似于comapareTo()== 0表示等于,而不仅仅是相同的大小。 为了避免这种情况,如果大小相同,比较可以继续查看其他内容,但是它不能用于检测相同大小的不同对象。 例: import java.util.Comparator; import java.util.HashSet; import java.util.Objects; import java.util.Set; import java.util.TreeSet; public class Person implements Comparable { private final String name; private int height; public Person(String name, int height) { this.name = name; this.height = height; } public int getHeight() { return height; } public […]

订购一个hashset示例?

我需要一个关于如何在HashSet上使用类似的类来获得升序的示例。 假设我有一个像这样的HashSet : HashSet hs = new HashSet(); 我怎样才能让hs按升序排列?

java.lang.Comparable和equals

如果我为类实现java.lang.Comparable ,我还是要重写equals()方法吗? 或者Comparable能equals工作吗? 如果答案是否定的 ,那么如果出现一些差异怎么办? 假设我在equals()方法中将两个对象称为相等的方式与我在compareTo()中将两个相同类的对象称为相等的方式不同。 而且,如果我实现Comparable ,我还必须覆盖equals()吗?

MyClass无法强制转换为java.lang.Comparable:java.lang.ClassCastException

我正在做一个java项目,我遇到了这个问题,不知道如何解决它。 我项目中的类(简化): public class Item { private String itemID; private Integer price; public Integer getPrice() { return this.price; } } public class Store { private String storeID; private String address; } public class Stock { private Item item; private Store store; private Integer itemCount; public Integer getInventoryValue() { return this.item.getPrice() * this.itemCount; } } 然后我尝试排序Stock的ArrayList […]

为什么Java Collections Framework提供了两种不同的排序方式?

如果我有一个我想要排序的元素列表,Java提供了两种方法来解决这个问题。 例如,假设我有一个Movie对象列表,我想按标题对它们进行排序。 我可以这样做的一种方法是调用静态java.util.Collections.sort()方法的单参数版本,并将我的电影列表作为单个参数。 所以我会调用Collections.sort(myMovieList)。 为了使其工作,必须声明Movie类以实现java.lang.Comparable接口,并且必须在此类中实现所需的方法compareTo()。 另一种排序方法是使用影片列表和java.util.Comparator对象作为参数调用静态java.util.Collections.sort()方法的双参数版本。 我会调用Collections.sort(myMovieList,titleComparator)。 在这种情况下,Movie类不会实现Comparable接口。 相反,在构建和维护影片列表本身的主类中,我将创建一个实现java.util.Comparator接口的内部类,并实现一个必需的方法compare()。 然后我将创建此类的实例并调用sort()的双参数版本。 第二种方法的好处是您可以创建无限数量的这些内部类比较器,因此您可以以不同的方式对对象列表进行排序。 在上面的示例中,您可以让另一个Comparator按照制作电影的年份进行排序。 我的问题是,为什么麻烦学习两种方式在Java中进行排序,当Collections.sort()的双参数版本执行第一个单参数版本所做的所有事情时,还有一个额外的好处就是能够对列表的元素进行排序根据几个不同的标准? 在编码时必须记住这一点。 你有一个基本的机制来排序Java中的列表来了解。