当前位置: 首页 > 知识库问答 >
问题:

在main方法中调用比较器参数

阎咏思
2023-03-14

我正在实现插入排序方法。这是我的代码要求。

  1. 方法insertionSort是一个不返回任何内容的静态方法
  2. 它有两个参数:通用数组和比较器(通用)
  3. 它使用合并排序算法对泛型数组进行排序

我的问题是:调用main方法时,比较器参数c使用什么?

到目前为止,我有一些未实现的方法(merge sort an isAnagaram)忽略这些

public class Sorting
{
    public static <T extends Comparable<T>> void insertionSort(T[] a, Comparator<T> c)
    {
        for (int i = 0; i < a.length; i++)
        {
            T key = a[i];
            int j;
            for (j = i - 1; j >= 0; j--)
            {
                if (c.compare(a[j], key) <= 0)
                    break;
                a[j + 1] = a[j];
            }

            a[j + 1] = key;
        }
    }

    public static void mergeSort()
    {
        //TODO
    }

    public static boolean isAnagram(String first, String second)
    {
        //TODO
        return false;
    }

    public static void main(String[] args)
    {
        Integer a[] = { 99, 8, 19, 88, 62, 2, 1, 9, 19 };

        // not sure how to pass parameter comparator

        insertionSort(a, null );

        for (int i = 0; i < a.length; i++)
        {
            System.out.print(a[i] + " ");
        }
    }
}

我环顾了一下堆栈溢出,并在比较器界面上搜索了很多,但我真的找不到任何需要将通用比较器作为参数传递的方法。有人能帮我告诉我我不理解的地方或指导我正确的方向。

共有1个答案

姚兴安
2023-03-14

比较器是一个无法实例化的接口。您需要实现它。有两种方法可以实现:

  • 比较

您需要为整数元素实现它们。像这样:

public class IntegerComparator implements Comparator {

    public int compare(Integer a, Integer b) {
        return a.intValue() - b.intValue();
    }

    public int equals(Object obj) {
        return this.equals(obj);
    }

}

在您的main中,您这样称呼它:

insertionSort(a, new IntegerComparator );

说明:比较器是一个接口,因此无法实例化。您需要实现它。您有一个要排序的整数元素数组,因此可以实现一个整数比较器。compare方法返回int值的减法。如果a

在这里和这里阅读更多。

 类似资料:
  • 我是一名自学型开发人员,现在正在学习Java。我了解到,要对函数接口使用方法引用,我们引用的方法的签名必须与该函数接口内抽象方法的签名匹配。 但是在学习比较器时,发现“Comparator.comparing()”方法接受函数接口并返回一个比较器。我知道函数接口的抽象方法必须接受一个参数并返回一个值。 但是我可以将任何部分(而不是完全)匹配Function接口签名的方法(作为方法参考)传递给比较器

  • 我看到了这篇关于用lambdas颠倒顺序的文章,但有一件事甚至让我对传统的比较器实现(或匿名内部类)感到困惑:为什么将第二个参数与第一个参数进行比较会颠倒顺序?

  • 我有一个客户对象类,它有一些变量,并且已经实现了一个关于其中一个变量的比较器。然而,我需要为不同的变量last_name实现另一个比较器。 因为我的Customer类中不能有2个compareTo()方法,所以我决定在这里专门创建一个Comparing类 但一旦触及Collections.sort(客户); 它不会激活下面的公共int比较(Customer Customer_1,Customerc

  • 我正在做一个关于java类的介绍的作业,该作业要求使用方法将温度从摄氏转换为华氏,反之亦然。它需要使用三种比较方法,而我无法弄清楚该把什么放进去。以下是说明: 三种比较方法: -此方法将另一个温度作为参数,如果调用对象具有与other相同的温度,则返回true,否则返回false。注意,摄氏温度可以等于华氏温度,如上式所示。 -如果调用对象的温度低于其他温度,则此方法将返回true,否则返回fal

  • 我在这个上面有点卡住了。我正在编写一个包含两个类的java程序,然后是一个测试程序来测试类中的方法。我被困在主方法中调用下面的两个方法上。所有的类文件(测试程序类和另外两个类)都在编译,IDE没有给我任何错误消息,计算只是没有发生…… --主要方法代码: -账户类别代码: 注意:平衡设置器正在工作,因为它在测试程序的前面被调用... 非常感谢任何帮助!!! 账户类别的完整代码: 主要方法完整代码:

  • 我有一个关于compareTo函数如何帮助比较器排序的问题,即o1。比较(o2)与o2。比较(o1) 如果两个字符串相等,则此方法返回0,否则返回正值或负值。如果第一个字符串在词典上大于第二个字符串,则结果为正,否则结果为负。 上面的陈述很简单,但是为什么o1.compare(o2)会给我一个升序,而o2.compare(o1)给了我一个降序? 如果我有整数值“5,10,3”,我得到3,5,10和