Java 如何对泛型对集合进行排序
这是家庭作业,所以我更喜欢一些解释,而不是仅仅给我答案 我有一个泛型Pair类,它可以接受任意键值K和任意值V 目标是编写一个通用方法:Java 如何对泛型对集合进行排序,java,sorting,Java,Sorting,这是家庭作业,所以我更喜欢一些解释,而不是仅仅给我答案 我有一个泛型Pair类,它可以接受任意键值K和任意值V 目标是编写一个通用方法: 公共静态集合sortPairCollection(集合列) 唯一的另一条准则是K类型必须实现可比性 经过一些挖掘,我看到人们推荐这样的东西: public static Collection<Pair<?,?>> sortPairCollection(Collection<Pair<?,?>> col) {
公共静态集合sortPairCollection(集合列)
唯一的另一条准则是K类型必须实现可比性
经过一些挖掘,我看到人们推荐这样的东西:
public static Collection<Pair<?,?>> sortPairCollection(Collection<Pair<?,?>> col)
{
Collections.sort(col, new Comparator<Pair<?,?>>(){
@Override
public int compare(Pair<?, ?> x, Pair<?, ?> y) {
return (Integer)x.v() - (Integer)y.v();
}
});
}
公共静态集合集合。排序
仅适用于列表
实例,而不适用于常规的集合
。例如,对哈希集进行排序是没有意义的
其次,由于算术溢出,您应该避免在比较器中使用减法。最好使用整数。比较
另外,一个返回类型为Collection
的方法,您可以使用Pair以下是完整的程序:
public static <K extends Comparable<? super K>, V extends Comparable<? super V>> void sortPairCollection(List<Pair<K, V>> col){
Collections.sort(col, new Comparator<Pair<K,V>>(){
public int compare(Pair<K, V> o1, Pair<K, V> o2) {
int keyflag = o1.getValue().compareTo(o2.getValue()) == 0 ? o1.getKey().compareTo(o2.getKey()): o1.getValue().compareTo(o2.getValue()) ;
return keyflag;
}});
}
public static同样,该方法声明返回Collection@Tunaki你说得对。自从我试图先弄清楚排序后,我就再也没有想到这个问题。@Tunaki谢谢,我错过了。我对这个答案有两个问题。1) 您不包括“K类型必须实现可比较”。对我来说,这意味着排序应该按键而不是值对这些对进行排序。2) 如果“目标是编写[显示的]泛型方法”,您可以这样做。它返回集合
的原因是它不应该改变参数,这也是为什么参数可以是集合
,而不是列表
@Andreas,因为你是对的。我实际上没有注意到关于K
的部分。我太忙于分析代码了,我没有抓住问题的全部要点。我将编辑。在问题中明确说明:因此我更喜欢一些解释,而不仅仅是给我答案。所以这不是答案
public static <K extends Comparable<? super K>, V extends Comparable<? super V>> void sortPairCollection(List<Pair<K, V>> col){
Collections.sort(col, new Comparator<Pair<K,V>>(){
public int compare(Pair<K, V> o1, Pair<K, V> o2) {
int keyflag = o1.getValue().compareTo(o2.getValue()) == 0 ? o1.getKey().compareTo(o2.getKey()): o1.getValue().compareTo(o2.getValue()) ;
return keyflag;
}});
}