有没有一种方法可以更改此选择排序方法以使其与任何类型的ArrayList一起使用?

时间:2018-08-21 05:37:54

标签: java arraylist

我的代码中也有3个选择排序方法,我也传递了整数,双精度和字符串的ArrayList,但是我想知道是否有一种方法可以更改我的方法以接受传递给它的任何类型的ArrayList 。因为如果我尝试将其更改为ArrayList对象,则无法在内部使用<或>比较。

这就是我所拥有的(仅适用于整数的ArrayList):

 private static ArrayList<Integer> selection_sort(ArrayList<Integer> arr) {
    for (int i = 0; i < arr.size(); i++) {
        int pos = i;
        for (int j = i; j < arr.size(); j++) {
            if (arr.get(j) < arr.get(pos))
                pos = j;
        }
        int min = arr.get(pos);
        arr.set(pos, arr.get(i));
        arr.set(i, min);
    }
    return arr;
 }

2 个答案:

答案 0 :(得分:2)

您可以使其适用于也为T的任何通用类型Comparable。只需添加通用类型并修改您的方法即可调用compareTo。喜欢,

private static <T extends Comparable<? super T>> ArrayList<T> selection_sort(
            ArrayList<T> arr) {
    for (int i = 0; i < arr.size(); i++) {
        int pos = i;

        for (int j = i; j < arr.size(); j++) {
            if (arr.get(j).compareTo(arr.get(pos)) < 0)
                pos = j;
        }

        T min = arr.get(pos);
        arr.set(pos, arr.get(i));
        arr.set(i, min);
    }
    return arr;
}

答案 1 :(得分:2)

您可以使用Collection排序方法:

Collections.sort(arr);
Collections.reverse(arr);

那会做你想要的。 实际上,如果您想对自定义对象进行排序,则可以使用

Collections.sort(List<T> list, Comparator<? super T> c) 

您可以定义自己的comparator

Refer documentation for Collections