Leg*_*ato 10 java sorting generics median
我需要一种方法来获得3个值的中值,我认为这是一个编写泛型方法的好机会,因为我没有真正实践过.我写了这个并且看起来非常直截了当,虽然我得到了警告,但根据我的测试,它似乎工作得很好.
我知道我可以使用固有排序的集合,或者Collections.sort()
,但这种方法是为了理解.
我想指出一些事情:
medianHelper
与Arrays.asList(a, b, c)
这是为什么?试图搜索这个给我无关的结果,否则它是难以捉摸的,因为我不确定发生了什么.我得到了一个UnsupportedOperationException
,但这不是我下面的方式.方法如下:
private static <T extends Comparable> T median(T a, T b, T c) {
List<T> medianHelper = new ArrayList<>();
T max;
T min;
medianHelper.add(a);
medianHelper.add(b);
medianHelper.add(c);
if (a.compareTo(b) >= 0) {
max = a;
min = b;
} else {
max = b;
min = a;
}
if (max.compareTo(c) == -1) {
max = c;
}
if (min.compareTo(c) >= 0) {
min = c;
}
medianHelper.remove(max);
medianHelper.remove(min);
return medianHelper.get(0);
}
Run Code Online (Sandbox Code Playgroud)
Kon*_*kov 12
您还没有正确引入type-parameter T
,因为它Comparable
也是通用的.
它应该是:
private static <T extends Comparable<? super T>> T median(T a, T b, T c)
Run Code Online (Sandbox Code Playgroud)
此外,你可以排序的medianHelper
名单,因为它的元素将是Comparable
.因此,您的方法可以大大缩短为:
private static <T extends Comparable<? super T>> T median(T a, T b, T c) {
List<T> medianHelper = Arrays.asList(a, b, c);
Collections.sort(medianHelper);
return medianHelper.get(1);
}
Run Code Online (Sandbox Code Playgroud)
请注意,Arrays.asList()
返回一个不可修改的列表,这意味着在创建元素后不允许添加/删除元素.如果您希望自己进行比较,可以使用new ArrayList<>
而不是Arrays.asList()
手动添加元素.
归档时间: |
|
查看次数: |
1033 次 |
最近记录: |