Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何对泛型对集合进行排序_Java_Sorting - Fatal编程技术网

Java 如何对泛型对集合进行排序

Java 如何对泛型对集合进行排序,java,sorting,Java,Sorting,这是家庭作业,所以我更喜欢一些解释,而不是仅仅给我答案 我有一个泛型Pair类,它可以接受任意键值K和任意值V 目标是编写一个通用方法: 公共静态集合sortPairCollection(集合列) 唯一的另一条准则是K类型必须实现可比性 经过一些挖掘,我看到人们推荐这样的东西: public static Collection<Pair<?,?>> sortPairCollection(Collection<Pair<?,?>> col) {

这是家庭作业,所以我更喜欢一些解释,而不是仅仅给我答案

我有一个泛型Pair类,它可以接受任意键值K和任意值V

目标是编写一个通用方法:

公共静态集合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;

            }});

    }