使用匿名类进行java排序

Osm*_*lid 10 java sorting anonymous class

我有课程,我正在排序列表.

import java.util.*;

public class First 
{

    private static HashMap<String,Second> msgs;

    public static void main(String[] args) 
    {           

    List<String> ls=new ArrayList<String>();


   ls.add("fourth");
   ls.add("2");
   ls.add("second");
   ls.add("first");
   ls.add("third");
   ls.add("1");

   Iterator it=ls.iterator();

   // before sorting
   while(it.hasNext())
   {
     String s=(String)it.next();
     System.out.println(s);
   }

   Collections.sort(ls, new Comparator(){
       public int compare(Object o1, Object o2) {
           return -1;
           // it can also return 0, and 1
        }
    });

System.out.println(" ");

//after sorting
   Iterator iti=ls.iterator();
   while(iti.hasNext())
   {
     String s=(String)iti.next();

     System.out.println(s);
   }

}


}
Run Code Online (Sandbox Code Playgroud)

程序运行后,我得到这些值:

1    
third
first
second
2
fourth
Run Code Online (Sandbox Code Playgroud)

我的问题是这里Collection.sort()函数的行为是什么.在从比较函数返回-1时,我们得到列表的相反顺序.那么我们如何获得其他排序订单?返回0和1的作用是什么?

Osm*_*lid 12

最后,我以这种方式修改了sort函数以获取排序数据.

 Collections.sort(ls, new Comparator() 
                           {

                            public int compare(Object o1, Object o2) 
                            {
                            String sa = (String)o1;
                            String sb = (String)o2;

                            int v = sa.compareTo(sb);

                            return v;           

                                // it can also return 0, and 1
                            }
                           }    
                    );
Run Code Online (Sandbox Code Playgroud)


Sau*_*abh 7

您可以这样使用匿名类:

TreeSet<String> treeSetObj = new TreeSet<String>(new Comparator<String>() {
    public int compare(String i1,String i2)
    {
        return i2.compareTo(i1);
    }
});
Run Code Online (Sandbox Code Playgroud)


JB *_*zet 6

这是javadoc所说的:

int比较(T o1,T o2)

比较它的两个参数的顺序.返回负整数,零或正整数,因为第一个参数小于,等于或大于第二个参数.

您的比较器实现不遵守此合同,因此结果是不确定的.如果认为o1小于o2,则必须返回负值.如果认为o1大于o2,则必须返回正值.如果它认为o1等于o2,它必须返回0.当然必须保持一致.如果o1 <o2,那么o2> o1.如果o1 <o2且o2 <o3,则o1 <o3.