スポンサーサイト





上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

タグ :

   印刷ボタン       この記事に拍手する       このエントリーをはてなブックマークに追加

Return to page top

  • Comments (Close): -
  • TrackBack (Close): -

オブジェクト配列のソート (1)





出席番号と名前のデータからなる、生徒についてのオブジェクト配列のソートを考えます。

基本型の配列のソートと異なるのは、配列の要素に複数のデータ型が混在していることです。

生徒についての配列では、出席番号がint型で、名前はString型です。出席番号でソートするのか、名前でソートするのか指定が必要です。

ComparableインタフェースのcompareTo()メソッドを使うと、ソートするデータの指定とともに、昇順・降順の指定も可能です。

package kihon;

import java.util.Arrays;

class Sample{

public static void main(String args[])
{
Student student[]=new Student[3];
student[0]=new Student(3,"三郎");
student[1]=new Student(1,"太郎");
student[2]=new Student(2,"次郎");

Arrays.sort(student);

for(int i=0; i<student.length; i++){
System.out.println("出席番号 "+student[i].num+", 名前 "+student[i].name);
}
}
}

class Student implements Comparable<Student>{

int num;
String name;

Student(int num,String name){
this.num=num;
this.name=name;
}

public int compareTo(Student s){
return this.num-s.num;
}
}


出力結果 :

出席番号 1, 名前 太郎
出席番号 2, 名前 次郎
出席番号 3, 名前 三郎



メインメソッドでは、配列の生成、ソート、出力を行っています。

問題はStudentクラスですが、Comparableインタフェースを継承した上でcompareTo()メソッドを定義しています(compareTo()メソッドの基本はこちら)。

Comparableインタフェースでは、ジェネリクスを使うことで、比較するデータをStudent型に限定しています。

プログラムの流れとしては、compareTo()メソッドが、ソートするデータの指定および昇順・降順の指定を行い、それをArrays.sort()メソッドが利用します。

compareTo()メソッドの中身は単純です。

return this.num-s.num;



深い話はArrays.sort()自体のコードソースを見る必要があるのでここには書きませんが、出席番号について昇順にするときは、this.numからobj.numを引いてreturnします。

逆に降順にするときは、objからthisを引きます。



今度はArrayListで、昇順ではなく降順で出力してみましょう。

package kihon;

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

class Sample{

public static void main(String args[])
{
ArrayList<Student> student=new ArrayList<Student>();
student.add(new Student(3,"三郎"));
student.add(new Student(1,"太郎"));
student.add(new Student(2,"次郎"));

Collections.sort(student);

for(int i=0; i<student.size(); i++){
System.out.println("出席番号 "+student.get(i).num+", 名前 "+student.get(i).name);
}
}
}

class Student implements Comparable<Student>{

int num;
String name;

Student(int num,String name){
this.num=num;
this.name=name;
}

public int compareTo(Student s){
return s.num-this.num;
}
}


関連記事

タグ :

   印刷ボタン       この記事に拍手する       このエントリーをはてなブックマークに追加

Return to page top

Comments:

Comment Form
Only inform the site author.

Trackback+Pingback:

TrackBack URL for this entry
http://javamania.blog25.fc2.com/tb.php/102-fe0e620f
  • 閉じるボタン
クラスライブラリ解説 目次
クラスライブラリとは
 ├ Java APIの調べ方
 ├ Objectクラスを調べる
 ├ ライブラリのインポート
 ├ 完全修飾クラス名を調べる
 ├ staticインポート
 ├ 外部ライブラリの利用

文字列を扱う
 ├ Stringとイミュータプル
 ├ StringBuilder 文字列の連結
 ├ toString()のオーバーライド
 ├ toXxCase() 大文字と小文字
 ├ compareTo() 値の比較
 ├ parseDouble() 文字を小数値に
 └ 文字列を抜き出す
 ├ char配列からString型へ変換
 ├ 空白文字の除去

日付を扱う
 ├ Calendar 現在の日付
 ├ Date 日付の表示

数値演算を扱う
 ├ round() 切上・切捨・四捨五入
 ├ BigDecimal
 ├ sqrt(),pow() 累乗と平方根
 ├ BigInteger
 ├ int型の最大値・最小値
 ├ random() 乱数作成

ファイルを扱う
 ├ ファイルの存在確認
 ├ ファイルを作成
 ├ ファイルの削除
 ├ ファイルサイズを調べる

入出力ストリーム
 ├ ファイルを読み込む
 ├ 画像ファイルのコピー
 ├ 日本語の読み込みと書き出し
 ├ バッファ入出力
 ├ データ型フリーの出力ストリーム
 ├ getBytes()メソッド

書式つき入出力
 ├ 書式を指定して出力
 ├ 引数インデックス
 ├ 整数値のフォーマット
 ├ 小数値のフォーマット
 ├ 九九の表のフォーマット

例外処理
 ├ printStackTrace()
 ├ NullPointerException
 └ NumberFormatException
月別アーカイブ
カテゴリ
リンク
QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。