在main方法中调用Comparator参数

时间:2014-10-12 22:27:45

标签: java generics comparator mergesort

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

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

    我的问题是:在主方法中调用时,我对Comparator参数c使用了什么?

    这是我到目前为止,我有一些未实现的方法(合并排序和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] + " ");
            }
        }
    }
    

    我查看了堆栈溢出以及在Comparator接口上搜索了很多但我无法找到任何需要将通用比较器作为参数传递的方法。有人可以帮助我告诉我不理解或指导我正确的方向。

1 个答案:

答案 0 :(得分:2)

Comparatorinterface,无法实例化。你需要实现它。有两种方法可以实现:

  • compare
  • equals

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

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 );

说明:Comparatorinterface,因此无法实例化。你需要实现它。您有一组Integer元素需要排序,因此您可以实现Integer Comparatorcompare方法返回int值的减法。如果&lt; b,那就是消极的。如果a == b,那么它是0.如果a> b,那就是积极的。

了解更多herehere