1. ホーム
  2. java

[解決済み] java 匿名クラスによるソート

2022-03-03 03:46:55

質問

リストをソートするクラスがあります。

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);
   }

}


}

プログラムを実行した後、このような値が得られます。

1    
third
first
second
2
fourth

ここで質問なのですが、Collection.sort()関数の動作はどうなっているのでしょうか?compare関数から-1を返すと、リストの逆順が得られます。では、他のソート順を得るにはどうすればいいのでしょうか?0と1を返すことの役割は何ですか?

どのように解決するのですか?

最後に、ソート関数をこのように改造して、ソートされたデータを得ることができました。

 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
                            }
                           }    
                    );