小编典典

使用Comparable和Comparator比较通用类型

java

我头疼,调试困难。我正在尝试比较两个通用值,以便可以根据值将它们插入到数组中进行排序。这是我第一次使用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
<t1){在compareTo()方法中。错误是“二进制运算符’<’的错误操作数类型,第一类型:V第二类型:V”。如果将两种类型都识别为V,为什么它是错误的操作数?

我认为所需的所有代码都在那里。我尝试使它们尽可能简洁,但是如果有人需要任何其他代码,我很乐意提供。干杯!


阅读 234

收藏
2020-11-26

共1个答案

小编典典

多亏了Chrylis,Catalin Pol和Louis Wasserman的共同努力,我才知道我需要将课堂改正为:

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

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

这成功了。我对Java相对较新,因此花了我一段时间才能理解每个人的说法,但是每个人都坚持不懈地努力。感谢大家的帮助!

2020-11-26