我有这个名为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
包含Key
和Value
属性。我需要根据比较结果比较值属性和返回int值。
在课堂上我尝试实现compareTo
方法。但我不知道要比较通用值。
如何在比较方法中实现值的比较?
答案 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