使用Comparable和Comparator比较泛型类型

时间:2013-12-04 16:36:28

标签: java generics comparator comparable

我遇到了头疼我调试有困难。我试图比较两个通用值,以便我可以根据值将它们插入到数组中。这是我第一次使用Comparable和Comparator接口,因此围绕这些问题的任何其他建议都会很棒。

这是我班级的设置方式:

public class SVStore<K, V extends Comparable<V>> implements Pairs<K, V>, Iterable<K>, Comparable<V>, Comparator<V> {

put()方法:

@Override
public V put(K key, V value) {

    SVData<K, V> tab[] = table;
    for (int i = 0; i < table.length - 1; i++) {
        if (value.compareTo(tab[i].dataValue) <= 0) {
            int index = i;
            for( int j = index; j < size - 1; j++){
                tab[j + 1] = tab[j];
            }
        }
        tab[i].setDataKey(key);
        tab[i].setDataValue(value);
        size++;
    }
    return value;
}

这些是我试图实现的compareTo()和compare方法。

@Override
public int compareTo(V t) {
 return compare(t, this);
 }

@Override
public int compare(V t, V t1) {
    if (t.equals(t1)){
        return 0;
    } else if (t < t1){
        return -1;
    } else {
        return 1;
    }
}

我遇到的第一个问题是在compareTo()方法中,它以“this”为中心。错误说“必需:V,V   发现:V,SVStore“。我知道答案不是将”this“转换为V.我如何将它与该数组索引中的V进行比较?

我遇到的第二个问题是......}否则if(t

我认为所需的所有代码都在那里。我尽量保持这些简洁,但如果有任何需要的额外代码,我很乐意提供它。干杯!

1 个答案:

答案 0 :(得分:1)

感谢Chrylis,Catalin Pol和Louis Wasserman的共同努力,我知道我需要纠正我的课程:

public class SortedValueStore<K, V extends Comparable<? super V>> implements PairStore187<K, V>, Iterable<K>, {

我不再需要编写自己的compareTo()方法。

这就是诀窍。我对java比较陌生,所以我花了一段时间才能得到每个人的意见,但每个人都坚持不懈地努力。感谢大家的帮助!