Dec*_*coy 3 java sorting generics comparable
我最近写了一个简单的通用选择排序方法来获得它的乐趣,当我对某些东西感到有些困惑时.这是我的代码:
public static <T extends Comparable<T>> void sort(List<T> list) {
for (int i = 0; i < list.size(); i++) {
int minIndex = i; // Assume that the first element is the minimum for now.
// Find smallest element in unsorted sub-list.
for (int k = i + 1; k < list.size(); k++) {
if (list.get(k).compareTo(list.get(minIndex)) < 0) {
minIndex = k;
}
}
// Swap smallest element with the first element in unsorted sub-list.
T temp = list.get(i);
list.set(i, list.get(minIndex));
list.set(minIndex, temp);
}
}
Run Code Online (Sandbox Code Playgroud)
函数本身工作正常,但我对泛型有点困惑.我用:
<T extends Comparable<T>>
Run Code Online (Sandbox Code Playgroud)
确保给定的List具有可比较的类型.但是,如果我使用原始的Comparable呢?那是:
<T extends Comparable>
Run Code Online (Sandbox Code Playgroud)
究竟会产生什么影响?
谢谢!
基本上,你失去了一些类型的安全.
当你拥有你的时候T temp = list.get(i),你能做些temp.compareTo什么?
T extends Comparable<T>,temp是Comparable<T>,这意味着你只能通过另一个T进入compareToT extends Comparable,tempis Comparable,意思是你可以传递任何东西compareTo第一个几乎肯定是你想要的,因为可比类型只能处理相同类型的对象.例如,String.compareTo只能处理String输入 - 如果传入Integer,则会得到ClassCastException.
鉴于唯一的安全输入temp.compareTo是类型的引用,T通常没有充分的理由使用原始类型.它偶尔会有助于绕过类型系统,但在大多数情况下,它会消除类型安全,而不会给你任何回报.
| 归档时间: |
|
| 查看次数: |
436 次 |
| 最近记录: |