当前位置: 首页 > 面试题库 >

使用Comparable和Comparator比较通用类型

陆俊迈
2023-03-14
问题内容

我头疼,调试困难。我正在尝试比较两个通用值,以便可以根据值将它们插入到数组中进行排序。这是我第一次使用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,为什么它是错误的操作数?

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


问题答案:

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

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

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

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



 类似资料:
  • 本文向大家介绍对比Java中的Comparable排序接口和Comparator比较器接口,包括了对比Java中的Comparable排序接口和Comparator比较器接口的使用技巧和注意事项,需要的朋友参考一下 Comparable Comparable 是排序接口。 若一个类实现了Comparable接口,就意味着“该类支持排序”。 即然实现Comparable接口的类支持排序,假设现在存在

  • 我想了解Comparator类的comparing方法的定义。我会留下一些代码,以防它有助于解释。我正在使用一个名为Person的类,它基本上存储一个名字和一个姓氏。可以使用get方法检索此数据。 然后,我创建了一个人员列表: 我一直在测试不同的方法来对这个人员列表进行排序。在其他可能性中,我发现了这个: 我明白这些行的作用。基本上,此列表是使用比较器排序的,该比较器使用排序键(Person的名称

  • 问题内容: 我想定义一个实现通用Comparable接口的类。在课堂上,我还定义了一个通用类型元素。为了实现该接口,我将比较委托给。这是我的代码: 当我尝试对其进行编译时,会出现以下错误信息: 谁能告诉我原因以及如何解决? 问题答案: (不带任何类型参数)是原始类型,因此: 我们可以通过任何形式的到。例如,这将编译: 该方法返回而不是,这将导致编译错误。 在第一点下的示例中,传递给后,我们会错误地

  • 我有一个Employee类,它有如下3个字段。 为此,我希望根据员工姓名(empName)排序,如果多个员工的姓名相同,则根据员工id(empId)排序。 为此,我编写了一个自定义比较器,使用java.util.比较器如下所示。 我已经创建了8个Employee对象并添加到ArrayList中,如下所示。 并使用上述比较器对列表进行如下排序。 它工作得非常好。但这可以使用类似的方法来完成,如下所示

  • 本文向大家介绍Java中Comparable和Comparator之间的区别,包括了Java中Comparable和Comparator之间的区别的使用技巧和注意事项,需要的朋友参考一下 比较器和比较器都是可用于对集合元素进行排序的接口。比较器接口属于java.util包,而可比较的接口属于java.lang包。比较器接口使用提供给它的两个对象进行排序收集,而可比较接口比较“this”是指提供给它

  • 本文向大家介绍Java Comparable 和 Comparator 的详解及区别,包括了Java Comparable 和 Comparator 的详解及区别的使用技巧和注意事项,需要的朋友参考一下 Java Comparable 和 Comparator 的详解及区别 Java 中为我们提供了两种比较机制:Comparable 和 Comparator,他们之间有什么区别呢?今天来了解一下。