田舎システムエンジニアの日常

アクセスカウンタ

zoom RSS Javaで配列にある値をソートする(Arrays、Collections)

<<   作成日時 : 2007/10/06 17:41   >>

なるほど(納得、参考になった、ヘー) ブログ気持玉 44 / トラックバック 3 / コメント 0

Javaで開発する際にソート処理を行う必要があったため、
ソート処理について調べてみた。

■数値の配列をソートする

ソート処理する場合にいくつか考えられるが、
今回はArrays.sortについて書きます。
int、doubleなどの数値型のデータ配列を
ソートしたいときには、以下のように行います。

(1) int型配列のソート
int[] intArr = {1, 5, 34, 21, -1, 0, 50}; // int型の配列
java.util.Arrays.sort(intArr);

この結果、以下のように昇順にソートされます。

-1
0
1
5
21
34
50

※ソートのアルゴリズムは修正クイックソートが用いられているようです。
無料ではじめるサイト運営
無料で始まる副収入












■ArrayListやListをソートする(文字配列比較)

// ArrayListのインスタンスを作成し、ソートします。
ArrayList e = new ArrayList();
e.add("A");
e.add("あ");
e.add("BBC");
e.add("AA1");
e.add("EED");
e.add("2007");
e.add("テスト");

Collections.sort(e, new Comparator(){
  public int compare(Object obj1, Object obj2){
   String val1 = obj1.toString();
   String val2 = obj2.toString();
   return val1.compareTo(val2);
  }
});

//デバック
for(int i=0;i<e.size();i++)
System.out.println(e.get(i));


この結果、以下のように昇順にソートされます。

2007
A
AA1
BBC
EED

テスト

※降順にする場合は、Collections.sort内の
return val1.compareTo(val2);

return val2.compareTo(val1);
へ変更します。


■HashMap、HashtableやVectorの値をソートする(文字配列比較)

//ソート対象配列
HashMap hmap = new HashMap();
hmap.put("A","テスト3");
hmap.put("あ","テスト2");
hmap.put("BBC","テスト1");
hmap.put("AA1","テスト4");
hmap.put("EED","テスト6");
hmap.put("2007","テスト5");
hmap.put("テスト","テスト7");

//ArrayListのインスタンスを作成し、ソートします。
ArrayList al = new ArrayList(hmap.entrySet());

System.out.println("ソート前 ");
for(int i=0;i<al.size();i++)
 System.out.println(al.get(i));

Collections.sort(al, new Comparator(){
  public int compare(Object obj1, Object obj2){
   Map.Entry ent1 =(Map.Entry)obj1;
   Map.Entry ent2 =(Map.Entry)obj2;
   String val1 = (String) ent1.getValue();
   String val2 = (String) ent2.getValue();
   return val1.compareTo(val2);
  }
});

System.out.println("ソート後 ");
for(int i=0;i<al.size();i++)
 System.out.println(al.get(i));


この結果、以下のように昇順にソートされます。

ソート前
テスト=テスト7
A=テスト3
EED=テスト6
BBC=テスト1
2007=テスト5
AA1=テスト4
あ=テスト2

ソート後
BBC=テスト1
あ=テスト2
A=テスト3
AA1=テスト4
2007=テスト5
EED=テスト6
テスト=テスト7

※降順にする場合は、Collections.sort内の
return val1.compareTo(val2);

return val2.compareTo(val1);
へ変更します。





■ArrayListやListをソートする(数値配列比較)

// ArrayListのインスタンスを作成し、ソートします。
ArrayList e = new ArrayList();
e.add("0");
e.add("1");
e.add("-20");
e.add("20");
e.add("15");
e.add("3");
e.add("2000");

Collections.sort(e, new Comparator(){
 public int compare(Object obj1, Object obj2){
  return -(((int)Integer.parseInt(obj2.toString())) - ((int)Integer.parseInt(obj1.toString())));
 }
});

for(int i=0;i<e.size();i++)
 System.out.println( e.get(i));


この結果、以下のように昇順にソートされます。

-20
0
1
3
15
20
2000

※降順にする場合は、Collections.sort内の
return -(((int)Integer.parseInt(obj2.toString())) - ((int)Integer.parseInt(obj1.toString())));

return -(((int)Integer.parseInt(obj1.toString())) - ((int)Integer.parseInt(obj2.toString())));
へ変更します。

■HashMap、HashtableやVectorの値をソートする(数値配列比較)

// ソート対象配列
HashMap hmap = new HashMap();
hmap.put("A","11");
hmap.put("あ","223");
hmap.put("BBC","221");
hmap.put("AA1","2");
hmap.put("EED","-500");
hmap.put("2007","-2");
hmap.put("テスト","0");

// ArrayListのインスタンスを作成し、ソートします。
ArrayList al = new ArrayList(hmap.entrySet());

System.out.println("ソート前 ");
for(int i=0;i<al.size();i++)
 System.out.println(al.get(i));

Collections.sort(al, new Comparator(){
 public int compare(Object obj1, Object obj2){
  Map.Entry ent1 =(Map.Entry)obj1;
  Map.Entry ent2 =(Map.Entry)obj2;
  return -(((int)Integer.parseInt(ent2.getValue().toString())) - ((int)Integer.parseInt(ent1.getValue().toString())));
 }
});

System.out.println("ソート後 ");
for(int i=0;i<al.size();i++)
 System.out.println(al.get(i));

この結果、以下のように昇順にソートされます。

ソート前
テスト=0
A=11
EED=-500
BBC=221
2007=-2
AA1=2
あ=223

ソート後
EED=-500
2007=-2
テスト=0
AA1=2
A=11
BBC=221
あ=223

※降順にする場合は、Collections.sort内の
return -(((int)Integer.parseInt(obj2.toString())) - ((int)Integer.parseInt(obj1.toString())));

return -(((int)Integer.parseInt(obj1.toString())) - ((int)Integer.parseInt(obj2.toString())));
へ変更します。


明解Java 入門編
明解Java 入門編

テーマ

関連テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ
気持玉数 : 44
なるほど(納得、参考になった、ヘー) なるほど(納得、参考になった、ヘー) なるほど(納得、参考になった、ヘー) なるほど(納得、参考になった、ヘー) なるほど(納得、参考になった、ヘー) なるほど(納得、参考になった、ヘー) なるほど(納得、参考になった、ヘー) なるほど(納得、参考になった、ヘー) なるほど(納得、参考になった、ヘー) なるほど(納得、参考になった、ヘー) なるほど(納得、参考になった、ヘー) なるほど(納得、参考になった、ヘー) なるほど(納得、参考になった、ヘー) なるほど(納得、参考になった、ヘー) なるほど(納得、参考になった、ヘー) なるほど(納得、参考になった、ヘー) なるほど(納得、参考になった、ヘー) なるほど(納得、参考になった、ヘー) なるほど(納得、参考になった、ヘー) なるほど(納得、参考になった、ヘー) なるほど(納得、参考になった、ヘー) なるほど(納得、参考になった、ヘー) なるほど(納得、参考になった、ヘー) なるほど(納得、参考になった、ヘー)
驚いた 驚いた 驚いた 驚いた 驚いた 驚いた
ナイス ナイス ナイス ナイス ナイス
ガッツ(がんばれ!) ガッツ(がんばれ!) ガッツ(がんばれ!) ガッツ(がんばれ!) ガッツ(がんばれ!)
かわいい かわいい かわいい
面白い

トラックバック(3件)

タイトル (本文) ブログ名/日時
プラダ 財布
Javaで配列にある値をソートする(Arrays、Collections) 田舎システムエンジニアの日常/ウェブリブログ ...続きを見る
プラダ 財布
2013/07/07 02:43
VISVIM サンダル
Javaで配列にある値をソートする(Arrays、Collections) 田舎システムエンジニアの日常/ウェブリブログ ...続きを見る
VISVIM サンダル
2013/07/09 20:33
モンクレール パリ
Javaで配列にある値をソートする(Arrays、Collections) 田舎システムエンジニアの日常/ウェブリブログ ...続きを見る
モンクレール パリ
2013/11/27 03:29

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文
Javaで配列にある値をソートする(Arrays、Collections) 田舎システムエンジニアの日常/BIGLOBEウェブリブログ
文字サイズ:       閉じる