降順
日本語 | 降順 |
英語 | descending order |
ふりがな | こうじゅん |
フリガナ | コウジュン |
ソートを行う際、「減っていくように並べ替える」こと。
たとえば「3, 2, 1」と並べることを「降順」という。逆に「1, 2, 3」のように並べることを「昇順」と言う。
Arraysクラスのsort()メソッドによるソートは昇順ソートであるため、降順にするためにはそのままでは行えない。
プリミティブ型の配列の場合、昇順ソートして、それを逆順にすればよい。
クラスの配列の場合、安定ソート等によって「降順でのソート」と「昇順ソートの逆」とでは結果が異なってしまう。そのため、降順でソートする場合には「要素の比較を行ったときに、逆の値を返す」ための、Comparatorインターフェイスの実装クラスを作り渡す必要がある。
「昇順」「降順」は、あくまで「並べる方向」に対して「増えていく」「減っていく」ことを表している点に注意。つまり、見た目の方向は全く関係ない。
たとえばWindowsのエクスプローラー等でファイルを一覧表示する場合に、下から上にアルファベットの順に並べ、上にZ、下にaが来るように並べたとする。この並べ方は「降順」である。「上から下」という方向に沿って「減るように」並べたからである。見た目の方向が「下から上」に「昇っている」からといって、昇順ではない。
たとえば「3, 2, 1」と並べることを「降順」という。逆に「1, 2, 3」のように並べることを「昇順」と言う。
Arraysクラスのsort()メソッドによるソートは昇順ソートであるため、降順にするためにはそのままでは行えない。
プリミティブ型の配列の場合、昇順ソートして、それを逆順にすればよい。
クラスの配列の場合、安定ソート等によって「降順でのソート」と「昇順ソートの逆」とでは結果が異なってしまう。そのため、降順でソートする場合には「要素の比較を行ったときに、逆の値を返す」ための、Comparatorインターフェイスの実装クラスを作り渡す必要がある。
「昇順」「降順」は、あくまで「並べる方向」に対して「増えていく」「減っていく」ことを表している点に注意。つまり、見た目の方向は全く関係ない。
たとえばWindowsのエクスプローラー等でファイルを一覧表示する場合に、下から上にアルファベットの順に並べ、上にZ、下にaが来るように並べたとする。この並べ方は「降順」である。「上から下」という方向に沿って「減るように」並べたからである。見た目の方向が「下から上」に「昇っている」からといって、昇順ではない。
参考サイト
// Sample.java
import java.util.Arrays;
import java.util.Comparator;
public class Sample
{
public static void main( String[] args )
{
// ソート対象の配列を作ります。
Integer[] integers = new Integer[]{ new Integer( 500 ), new Integer( 100 ), new Integer( 900 ), new Integer( 700 ), new Integer( 300 ) };
// ソートします。
Arrays.sort( integers, new DescendingIntegerComparator() );
for( int iF1 = 0; iF1 < integers.length; ++iF1 )
{
System.out.println( integers[iF1] );
}
// 900
// 700
// 500
// 300
// 100
}
}
/**
* 降順にソートするためのComparator
*/
class DescendingIntegerComparator implements Comparator
{
public int compare( Object lh, Object rh )
{
Integer iL = (Integer)lh;
Integer iR = (Integer)rh;
// Integerとして取得してそのcompareTo()の結果を
// そのまま使用します。ただし、逆順にするため
// マイナスにします。
return -( iL.compareTo( iR ) );
}
}
import java.util.Arrays;
import java.util.Comparator;
public class Sample
{
public static void main( String[] args )
{
// ソート対象の配列を作ります。
Integer[] integers = new Integer[]{ new Integer( 500 ), new Integer( 100 ), new Integer( 900 ), new Integer( 700 ), new Integer( 300 ) };
// ソートします。
Arrays.sort( integers, new DescendingIntegerComparator() );
for( int iF1 = 0; iF1 < integers.length; ++iF1 )
{
System.out.println( integers[iF1] );
}
// 900
// 700
// 500
// 300
// 100
}
}
/**
* 降順にソートするためのComparator
*/
class DescendingIntegerComparator implements Comparator
{
public int compare( Object lh, Object rh )
{
Integer iL = (Integer)lh;
Integer iR = (Integer)rh;
// Integerとして取得してそのcompareTo()の結果を
// そのまま使用します。ただし、逆順にするため
// マイナスにします。
return -( iL.compareTo( iR ) );
}
}
// Sample.java import java.util.Arrays; import java.util.Comparator; public class Sample { public static void main( String[] args ) { // ソート対象の配列を作ります。 Integer[] integers = new Integer[]{ new Integer( 500 ), new Integer( 100 ), new Integer( 900 ), new Integer( 700 ), new Integer( 300 ) }; // ソートします。 Arrays.sort( integers, new DescendingIntegerComparator() ); for( int iF1 = 0; iF1 < integers.length; ++iF1 ) { System.out.println( integers[iF1] ); } // 900 // 700 // 500 // 300 // 100 } } /** * 降順にソートするためのComparator */ class DescendingIntegerComparator implements Comparator { public int compare( Object lh, Object rh ) { Integer iL = (Integer)lh; Integer iR = (Integer)rh; // Integerとして取得してそのcompareTo()の結果を // そのまま使用します。ただし、逆順にするため // マイナスにします。 return -( iL.compareTo( iR ) ); } }