JAvaソートcompareTo:学生成績の降順出力

6703 ワード

簡単なプログラムの問題:
学生の名前、点数情報を入力し、成績の降順に並べ替えて出力するプログラムを作成します.
実現方法はいろいろある
  • 方法1
  • public class ScoreSort2 
    {
        private String name;
        private long grade;
    
        public long getGrade() 
        {
            return grade;
        }
        public void setGrade(long grade) 
        {
            this.grade = grade;
        }
        public String getName()
        {
            return name;
        }
        public void setName(String name)
        {
            this.name = name;
        }
    
        public String toString()
        {
            return this.name;
        }
        public static void main(String[] args) 
        {
            Scanner sc = new Scanner(System.in);
            System.out.println("       :");
            int num = sc.nextInt();  //    
            ScoreSort2 message[] = new ScoreSort2[num]; //       
            for(int i = 0; i < message.length; i++)
            {
            	message[i] = new ScoreSort2();
                System.out.println("    " + (i+1) + "      ");
                String name = sc.next();
                message[i].setName(name);
                System.out.println("    " + (i+1) + "      ");
                long grade = sc.nextLong();
                message[i].setGrade(grade);
            }
            System.out.println("      :");
            for(int i = 0; i < message.length; i++)
            {
                for(int j = i+1; j 
  • 方法二
  • public class ScoreSort3 
    {
    
    	public static void main(String[] args) 
    	{
    		Scanner input = new Scanner(System.in);		
    		System.out.println("       ");
    		int num = input.nextInt();
    		scoreData[] arr = new scoreData[num];
    		
    		for(int i=0;i0)
    		{
    			return -1;
    		}
    		return 0;
    	}
    	
    	@Override
    	public String toString(){//  toString  
    		return "  :" + this.name + "   :" + this.score;
    	}
    }

    Arrays.sort
    public static void sort(Object[] a)

    要素の自然な順序に基づいて、指定したオブジェクト配列を昇順にソートします.配列内のすべての要素を実装する必要がありますComparableインタフェース.さらに、配列内のすべての要素は
    互いに比較可能(すなわち、配列内の任意の
    e 1と
    e 2要素の場合、
    e1.compareTo(e 2)投げ出してはならない
    ClassCastException).
    このソートが安定していることを保証します.sortメソッドを呼び出すことによって、等しい要素が再ソートされません.
    このソート・アルゴリズムは、変更されたマージ・ソート・アルゴリズムです(低サブリストの最高要素が高サブリストの最低要素より小さい場合は、マージは無視されます).このアルゴリズムは、n*log(n)のパフォーマンスを保証します.
    タイプパラメータ:T-このオブジェクトと比較できるオブジェクトのタイプ
    インタフェースComparable
    タイプパラメータ:T-このオブジェクトと比較できるオブジェクトのタイプ
    public interface Comparable

    このインタフェースは、実装された各クラスのオブジェクトを強制的に並べ替えます.このソートをクラスの自然ソートと呼び,クラスのcompareToメソッドをその自然比較メソッドと呼ぶ.
    このインタフェースを実装するオブジェクトのリスト(および配列)は、Collections.sort(およびArrays.sort)によって自動的にソートすることができる.このインタフェースを実装するオブジェクトは、比較器を指定することなく、順序マッピングのキーまたは順序セットの要素として使用できます.
    クラスCの各e 1およびe 2については、e 1のみである.compareTo(e 2)==0とe 1.equals(e 2)が同じboolean値を持つ場合,クラスCの自然ソートはequalsと一致する.nullはクラスのインスタンスではありません.e.equals(null)がfalseを返しても、e.compareTo(null)はNullPointerExceptionを放出します.
    (必須ではないが)自然ソートをequalsと一致させることを推奨します.これは,equalsと一致しない要素(またはキー)を自然ソートする場合,明示的な比較器の秩序化集合(および秩序化マッピングテーブル)挙動が「奇妙」であるためである.特に、このような秩序化された集合(または秩序化されたマッピングテーブル)は、equalsメソッドに従って定義された集合(またはマッピングテーブル)の従来の協定に反する.
    たとえば、明示的な比較器を使用しない秩序化されたセットに2つのキーaおよびbを追加し、(!a.equals(b)&&a.compareTo(b)==0)とすると、2番目のadd操作は、秩序化されたセットの観点からaおよびbが等しいためfalse(秩序化されたセットのサイズが増加していない)を返す.
    実際,Comparableを実装するJavaコアクラスはすべてequalsと一致する自然ソートを持つ.java.math.BigDecimalは例外で、値が等しいが精度が異なるBigDecimalオブジェクト(4.0や4.00など)を自然なソートで同等と見なします.
    数学的には、与えられたクラスC上の自然な順序付けを定義する関係式は以下の通りである.
          {(x, y)|x.compareTo(y) <= 0}。
    

    全体的なソート

    はい:
          {(x, y)|x.compareTo(y) == 0}。
    

    それは直接
    compareTo
    の協定、商は
    C

    等価関係
    、ナチュラルソートは
    C

    全体的なソート
    .クラスの自然なソートといえば
    equalsと一致
    の場合は、自然に並べ替えられた商がクラスからequals(Object)
    メソッド定義の等価関係.
        {(x, y)|x.equals(y)}。

    このインタフェースはJava Collections Frameworkのメンバーです.
    次のバージョンから開始します.
    1.2
    関連項目:Comparator
    メソッドの概要int compareTo(T o)このオブジェクトと指定されたオブジェクトの順序を比較します.
    メソッドの詳細
    compareTo
    int compareTo(T o)

    このオブジェクトと指定したオブジェクトの順序を比較します.オブジェクトが指定したオブジェクトより小さい、等しい、またはそれより大きい場合は、それぞれ負の整数、ゼロ、または正の整数を返します.
    実装クラスは、すべてのxおよびyに対してsgn(x.compareTo(y)=−sgn(y.compareTo(x))の関係があることを保証しなければならない.(これは、y.compareTo(x)が異常を投げ出すと、x.compareTo(y)も異常を投げ出すことを意味する.)
    実装クラスはまた、関係が伝達可能であることを確認する必要があります:(x.compareTo(y)>0&&y.compareTo(z)>0)は、x.compareTo(z)>0を意味します.
    最後に、実装者は、x.compareTo(y)=0がすべてのzに対してsgn(x.compareTo(z))==sgn(y.compareTo(z))が存在することを意味することを保証しなければならない.(x.compareTo(y)==0)=(x.equals(y))というやり方を強くお勧めしますが、厳密に要求するわけではありません.一般に、Comparableインタフェースを実装し、この条件に違反するクラスは、この事実を明確に指摘しなければならない.「注意:equalsと一致しない自然なソートがあることに注意してください.」
    前述の説明では、シンボルsgn(expression)は、expressionの値が負であるか、ゼロであるか、正であるかに基づいて、それぞれ−1、0または1の値を返すsignum数学関数を指定する.
    パラメータ:o-比較するオブジェクト.
    戻り値:
    負の整数、ゼロまたは正の整数.このオブジェクトが指定したオブジェクトより小さいか、等しいか、または大きいかによって異なります.
    放出:ClassCastException-指定したオブジェクトのタイプがこのオブジェクトと比較できない場合
    Arraysを添付します.sortの使い方:
          1. 数値ソートint[]intArray=new int[]{4,1,3,-23};
      Arrays.sort(intArray);出力:[-23,1,3,4]
      2. 文字列のソートは、まず大文字と小文字のString[]strArray=new String[]{"z","a","C"};
      Arrays.sort(strArray);出力:[C,a,z]
      3. アルファベット順に厳密に並べ替えます.つまり、大文字と小文字の並べ替えCase-insensitive sortを無視します.
      Arrays.sort(strArray, String.CASE_INSENSITIVE_ORDER);出力:[a,C,z]
      4. 逆ソート、Reverse-order sort
      Arrays.sort(strArray, Collections.reverseOrder());出力:[z,a,C]
      5. 大文字と小文字の逆ソートを無視Case-insensitive reverse-order sort
      Arrays.sort(strArray, String.CASE_INSENSITIVE_ORDER);  Collections.reverse(Arrays.asList(strArray));出力:[z,C,a]
    6、オブジェクト配列の並べ替え
    オブジェクトの配列をソートするにはjavaを自分で実装します.util.Comparatorインタフェースの例:Common_User[] userListTemp=new Common_User[temp.size()];  Arrays.sort(userListTemp, new PinyinComparator());PinyinComparatorはComparatorインタフェースを実現し,comparareメソッドを書き換え,Arraysがどのルールで2つのオブジェクトのサイズを比較するかを教える.