配列やコレクションのsort

  1. java.util.Arrays / java.util.Collection を利用する
    • 実装はクイックソートらしい
  2. 十分に検証されていて、こなれたものがある場合自分で実装しないのが吉

Comparableインタフェースを実装しているクラスをソートする場合

  1. Comparableインタフェースを実装しているクラスとは?
    /**
     * @param o 比較対象の Object
     * @return このオブジェクトが指定されたオブジェクトより小さい場合は
     * 負の整数、等しい場合はゼロ、大きい場合は正の整数を返す
     * @throws ClassCastException 指定されたオブジェクトの型が原因で、
     * この Object と比較できない場合
     */
    int compareTo(Object o)
    を実装しているクラス。
  2. Sort
    java.util.Arrays#sort(Object[] a)
    java.util.Collections#sort(Object[] a)
    でソートされる。

Comparableインタフェースを実装していないクラスをソートする場合

  1. java.util.Comparator インタフェースを実装した、比較用のクラスを作成する。
    比較用のクラスとは、
    /**
     * @param o1 比較対象の最初のオブジェクト
     * @param o2 比較対象の 2 番目のオブジェクト
     * @return 最初の引数が 2 番目の引数より小さい場合は負の整数、
     * 両方が等しい場合は 0、最初の引数が 2 番目の引数より大きい場合は正の整数
     * @throws ClassCastException 引数の型がこのコンパレータによる比較を妨げる場合
     */
    public int compare(Object o1,Object o2)
    を実装しているクラス。
  2. Sort
    java.util.Arrays#sort(Object[] a , new ComparatorForA() )
    java.util.Collections#sort(Object[] a , new ComparatorForA() )
    でソートされる。

Comparatorをつかったサンプル

 /*
  * Copyright (c) 2004-2005 HONDOH Atsushi All rights reserved.
  */
 import java.util.Arrays;
 import java.util.Comparator;
 import java.util.Currency;
 import java.util.Locale;
 
 
 /**
  * JavaのサポートしているLocale情報の一覧をwikiの表形式で書き出すクラス.
  *
  * ISO639(言語),3166(国/地域),4217(通貨)の一覧表を作成する。
  *
  * @version $Id$
  * @author  HONDOH Atsushi
  */
 public final class LocaleList {
  /**
   * コンストラクタを無効にするためのprivateなコンストラクタ
   */
  private LocaleList() {
  }
 
  public static void main(final String[] args) {
    // JavaがサポートしているLocaleクラスの配列を取得する
    Locale[] availableLocales = Locale.getAvailableLocales();
 
    // Localeをそのシステム内表現形式でソートする
    Arrays.sort(availableLocales, new LocaleComparator());
 
    for (int cnt = 0; cnt < availableLocales.length; cnt++) {
      Locale locale = availableLocales[cnt];
 
      System.out.print("|");
      System.out.print(locale.getDisplayName() + "|");
      System.out.print("BGCOLOR(lavender):" + locale.toString() + "|");
      System.out.print(locale.getLanguage() + "|");
      System.out.print(locale.getISO3Language() + "|");
      System.out.print("BGCOLOR(lavender):" + locale.getCountry() + "|");
      System.out.print("BGCOLOR(lavender):" + locale.getISO3Country() + "|");
 
      try {
        Currency currency = Currency.getInstance(locale);
 
        System.out.print(currency.getCurrencyCode() + "|");
 
        // 現地の通貨表現形式をHTMLのUnicodeエスケープで出力する。
        // そのためには、デフォルトのLocaleを当該通貨のLocale
        // にする必要がある(そうでないと、ISO4217の表現形式
        // ((英字3文字))で出力される)
        Locale.setDefault(locale);
 
        char[] symbol = (currency.getSymbol()).toCharArray();
        Locale.setDefault(Locale.JAPAN);
 
        for (int cnt2 = 0; cnt2 < symbol.length; cnt2++) {
          System.out.print("&#x");
          System.out.print(Integer.toHexString(symbol[cnt2]));
          System.out.print(";");
        }
 
        System.out.print("|");
 
        int digits = currency.getDefaultFractionDigits();
 
        System.out.print("9");
 
        if (digits > 0) {
          System.out.print(".");
        }
 
        for (int cnt2 = 0; cnt2 < digits; cnt2++) {
          System.out.print("9");
        }
 
        System.out.print("|");
      } catch (IllegalArgumentException ex) {
        // 通貨のないLocaleの場合は、Currency.getInstance()
        // で IllegalArgumentException が発生する。
        System.out.print("|||");
      }
 
      System.out.print("\n");
    }
  }
 }
 
 class LocaleComparator implements Comparator {
  public int compare(final Object arg0, final Object arg1) {
    String localeName0 = ((Locale) arg0).toString();
    String localeName1 = ((Locale) arg1).toString();
 
    return localeName0.compareTo(localeName1);
  }
 }

Java#JavaSE


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS   sitemap
Last-modified: 2006-02-18 (土) 12:48:14 (6635d)
Short-URL:
ISBN10
ISBN13
9784061426061