-3

簡単なプログラムを実行しようとしています。メソッドArrayListを使用collections.sort()しましたが、出力がソートされていません。メソッドの使用方法に問題はありますcollections.sort()か?

根本的な原因を見つけるのを手伝ってください。

   import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Vector;

    public class Vector1 {

        public static void main(String args[])
        {
            ArrayList<String> arraylist=new ArrayList<String>();

            arraylist.add("Register.classname");
            arraylist.add("com.jdbc.driver");
            arraylist.add("create Statement");
            arraylist.add("String Sql=Create table hello(column1 Number);");
            arraylist.add("execute Statement");

            Vector<String> vectorlist=new Vector<String>();
            vectorlist.add("Register.classname");
            vectorlist.add("com.jdbc.driver");
            vectorlist.add("create Statement");
            vectorlist.add("String Sql=Create table hello(column1 Number);");
            vectorlist.add("execute Statement");

            Collections.sort(arraylist);
            Collections.sort(vectorlist);

            for(int i=0; i<arraylist.size();i++)
            {
                System.out.println("Arraylist:"+arraylist.get(i));
            }
            for(int j=0;j<arraylist.size();j++)
            {
            System.out.println("Vectorlist:"+vectorlist.get(j));    

            }




        }
    }


    Output:
    Arraylist:Register.classname
    Arraylist:String Sql=Create table hello(column1 Number);
    Arraylist:com.jdbc.driver
    Arraylist:create Statement
    Arraylist:execute Statement
    Vectorlist:Register.classname
    Vectorlist:String Sql=Create table hello(column1 Number);
    Vectorlist:com.jdbc.driver
    Vectorlist:create Statement
    Vectorlist:execute Statement
4

7 に答える 7

2

これはあなたの出力です:

Register.classname
String Sql=Create table hello(column1 Number);
com.jdbc.driver
create Statement
execute Statement

そして、それはアルファベット順の正しい順序のようです。他に何を期待していましたか?

Collections#Sortのデフォルトの実装を使用しcompareTojava.lang.String文字列をアルファベット順に並べます。

于 2013-04-23T11:10:20.120 に答える
1

出力はアルファベット順に並べられています。

Arraylist:Register.classname
Arraylist:String Sql=Create table hello(column1 Number);
Arraylist:com.jdbc.driver
Arraylist:create Statement
Arraylist:execute Statement

AZ は az の前に来ることに注意してください。

大文字と小文字を区別しないで並べ替えるには、次のようにします。

Collections.sort(arraylist, new Comparator<String>() {
    @Override
    public int compare(String o1, String o2) {              
        return o1.compareToIgnoreCase(o2);
    }
});
于 2013-04-23T11:11:08.760 に答える
0

Collection.sort() の使用中に大文字と小文字を区別しないようにするには、独自の Comparator を作成する必要があります

public class IgnoreCase implements Comparator<Object> {
        public int compare(Object i, Object j) {
            String a = (String) i;
            String b = (String) j;
            return a.toLowerCase().compareTo(b.toLowerCase());
        }
    }

Collections.sort(arraylist, new IgnoreCase ());
于 2013-04-23T11:15:30.480 に答える
0

並べ替えは正しいです。コレクションにはデフォルトの文字列ソートが適用されます。ソートは、開始文字のASCII値に基づいて昇順に行われます

于 2013-04-23T11:12:36.437 に答える
0

出力はアルファベット順に正しくソートされます。

アスキー テーブルでわかるように、http://www.asciitable.com/大文字は小文字の前に来ます。

そう:

  • XXXXXXXX:String Sql=Create table hello(column1 Number);

の前に来る:

  • XXXXXXXX:com.jdbc.driverプレフィックスが同じ場合。

大文字と小文字を区別せずに文字列を並べ替えたい場合は、大文字と小文字を区別しないコンパレータを使用します。

Collections.sort(arraylist, String.CASE_INSENSITIVE_ORDER);
Collections.sort(vectorlist, String.CASE_INSENSITIVE_ORDER);

次に、出力は次のようになります。

出力:

Arraylist:com.jdbc.driver
Arraylist:create Statement
Arraylist:execute Statement
Arraylist:Register.classname
Arraylist:String Sql=Create table hello(column1 Number);
Vectorlist:com.jdbc.driver
Vectorlist:create Statement
Vectorlist:execute Statement
Vectorlist:Register.classname
Vectorlist:String Sql=Create table hello(column1 Number);
于 2013-04-23T11:16:04.513 に答える