[英]Do I need to specify a parameter type generic when dealing with Comparable interface?
我有一个选择排序算法,适用于实现可比接口的任何数据类型(例如 Integer、Double、Character)。
public class SelectionSort {
public static void sort(Comparable[] a) {
int n = a.length;
for (int i = 0; i < n; i++) {
int min = i;
for (int j = i; j < n; j++)
if (less(a[j], a[min]))
min = j;
exchange(a, i, min);
}
}
private static boolean less(Comparable a, Comparable b) {
return a.compareTo(b) < 0;
}
private static void exchange(Comparable[] a, int i, int j) {
Comparable temp = a[i];
a[i] = a[j];
a[j] = temp;
}
public static boolean isSorted(Comparable[] a) {
for (int i = 1; i < a.length; i++)
if (less(a[i], a[i - 1]))
return false;
return true;
}
}
但是,我收到多个警告,告诉我“Comparable 是原始类型。对通用类型 Comparable 的引用应该被参数化”。 我是否需要将 class 实现为通用的,还是可以保持原样? 如果我需要将 class 实现为泛型,我该怎么做,因为方法是 static。
它是具有通用方法的非通用 Class。
public class SelectionSort {
public static <T extends Comparable<T>> void sort(T[] a) {
int n = a.length;
for (int i = 0; i < n; i++) {
int min = i;
for (int j = i; j < n; j++)
if (less(a[j], a[min]))
min = j;
exchange(a, i, min);
}
}
private static <T extends Comparable<T>> boolean less(T a, T b) {
return a.compareTo(b) < 0;
}
private static <T extends Comparable<T>> void exchange(T[] a, int i, int j) {
T temp = a[i];
a[i] = a[j];
a[j] = temp;
}
public static <T extends Comparable<T>> boolean isSorted(T[] a) {
for (int i = 1; i < a.length; i++)
if (less(a[i], a[i - 1]))
return false;
return true;
}
public static void main(String[] args) {
Integer [] arr = {4,9,5,2,67};
SelectionSort.sort(arr);
for(int j=0; j<arr.length; j++){
System.out.println(arr[j]);
}
}
}
如果您在 object 上调用 sort 方法,而其 class 未实现Comparable
接口,则此代码将抛出异常
这是更新的代码:
public class SelectionSort {
public static <T extends Comparable<T>> void sort(T[] a) {
int n = a.length;
for (int i = 0; i < n; i++) {
int min = i;
for (int j = i; j < n; j++)
if (less(a[j], a[min]))
min = j;
exchange(a, i, min);
}
}
private static <T extends Comparable<T>> boolean less(T a, T b) {
return a.compareTo(b) < 0;
}
private static <T extends Comparable<T>> void exchange(T[] a, int i, int j) {
T temp = a[i];
a[i] = a[j];
a[j] = temp;
}
public static <T extends Comparable<T>> boolean isSorted(T[] a) {
for (int i = 1; i < a.length; i++)
if (less(a[i], a[i - 1]))
return false;
return true;
}
}
以下是您现在可以使用选择排序的方法:
Integer[] intArray = {5, 4, 3, 2, 1};
SelectionSort.sort(intArray);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.