排除故障以实现compareTo方法

时间:2017-07-13 23:22:25

标签: java

我有这个名为Pair的类:

public class Pair<K,V> implements Map.Entry<K,V> , Comparable<Pair<K,V>>{

    private K key;
    private V value;

    public Pair(){}

    public Pair(K _key, V _value){
        key = _key;
        value = _value;
    }

    //---Map.Entry interface methods implementation
    @Override
    public K getKey() {
        return key;
    }

    @Override
    public V getValue() {
        return value;
    }

    @Override
    public V setValue(V _value) {
        return value = _value;
    }
    ///---Map.Entry interface methods implementation

    @Override
    // if return value negative passed value is bigger
    // if return value positive passed value is smaller
    // if return value is zero values is equal
    public int compareTo(Pair<K, V> o) {
        V val1 = o.getValue();
        V val2 = this.getValue();

        // how to make compare between values(to check if val1 is bigger or equal to val2 and vice versa ) 
    }
}

正如您所见,类Pair包含KeyValue属性。我需要根据比较结果比较值属性和返回int值。

在课堂上我尝试实现compareTo方法。但我不知道要比较通用值。

如何在比较方法中实现值的比较?

2 个答案:

答案 0 :(得分:6)

为了能够比较V, 它需要具有可比性。 更改Pair的声明以使用V上的此附加约束来实现此目的,如下所示:

class Pair<K, V extends Comparable<V>> implements Map.Entry<K, V>, Comparable<Pair<K, V>> {

然后你就可以这样写compareTo

public int compareTo(Pair<K, V> o) {
  V val1 = o.getValue();
  V val2 = this.getValue();

  return val1.compareTo(val2);
}

要解释一下......在本声明中,我们对T一无所知:

class Item<T> {

由于我们对此一无所知,因此此类中T类型的值只有Object的方法,没有别的。

如果您这样写,我们会添加有关T的信息:

class Item<T extends Comparable<T>> {

我们知道T延伸Comparable<T>, 所以此类中T类型的值的方法为Comparable<T>, 那是compareTo(T other)

答案 1 :(得分:1)

只要compareTo实现V接口,就可以使用V的{​​{1}},依赖于对将用作{{的值的classe的比较1}}:

Comparable