java - 使用数组排序

标签 java arrays sorting

我正在测试不同的排序方法(选择、气泡插入),并尝试同时使用比较器。

到目前为止我有两个类;主要和选择排序。

我的主要内容如下:

public class Main {

    /**
     * @param args
     */
    public static void main(String[] args) {
        String[] anArray = {"Ludo", "matador", "ChessTitan", "Rottefælden"};

        for (int i=0; i<anArray.length-1; i++) {
            for (int j=i+1; j<anArray.length; j++) {
                if (anArray[j].compareTo(anArray[i]) < 1) {

                    String temp = anArray[i];
                    anArray[i] = anArray[j];
                    anArray[j] = temp;

                }
            }

        }

        for (String string : anArray) {
            System.out.println(string);
        }
    }
}

我的选择排序如下所示:

public class SelectionSort implements Comparator<String> {

    @Override
    public int compare(String o1, String o2) {      
        return o1.compareTo(o2);
    }
}

我想做的是在使用选择排序时使用我的比较器。

这怎么可能?

最佳答案

替换这一行:

if (anArray[j].compareTo(anArray[i]) < 1) {

这样:

if (comparator.compare(anArray[j],anArray[i]) < 1) {

其中 comparator 是您要使用的比较器的实例。

<小时/>

由于您的比较器没有状态,您可能希望将其分配给静态最终字段。

private static final Comparator<String> COMP = new SelectionSort();

所以现在上面的代码将显示为

if (COMP.compare(anArray[j],anArray[i]) < 1) {
<小时/>

这是您最后一个问题的解决方案。创建两个重载的静态方法,一个带有比较器,一个没有,然后还创建一个使用自然顺序的比较器(令人惊讶的是,据我所知,JDK 中没有这样的东西)。像这样的事情:

private static final Comparator<? extends Comparable> NATURAL_ORDER = new Comparator<Comparable>() {
    @Override
    public int compare(final Comparable o1, final Comparable o2) {
        return o1.compareTo(o2);
    }
};

private static <T> Comparator<T> naturalOrder() {
    return (Comparator<T>) NATURAL_ORDER;
}

public static <T> void sort(final T[] array) {
    if (!Comparable.class.isAssignableFrom(array.getClass().getComponentType())) {
        throw new IllegalArgumentException(
              "Array Component Type must implement Comparable");
    }

    sort(array, naturalOrder());
}

public static <T> void sort(final T[] array, final Comparator<? super T> comparator) {
    // implement sort here
}

关于java - 使用数组排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12403092/

相关文章:

java - android中Tab长点击问题

arrays - 如何将空白元素添加到数组的索引[0]

java - 获取 ArrayList 元素平均值的最短形式

javascript - js如何将数组转换为枢轴数组

c - 3 未经排序的数组中的最大数字,我在哪里缺少逻辑?

java - 正则表达式在捕获之前仅与两个相似的 URL 进行非常具体的匹配

java - 我如何检测串行端口何时被java中的设备关闭?

php - PHP中按值对多维关联数组进行排序

java - 将 python webapp 与一些 jar 文件集成

java - 在 Java 中使用分隔符逗号在嵌套大括号中拆分字符串