配列やコレクションのsort †
- java.util.Arrays / java.util.Collection を利用する
- 十分に検証されていて、こなれたものがある場合自分で実装しないのが吉
Comparableインタフェースを実装しているクラスをソートする場合 †
- Comparableインタフェースを実装しているクラスとは?
/**
* @param o 比較対象の Object
* @return このオブジェクトが指定されたオブジェクトより小さい場合は
* 負の整数、等しい場合はゼロ、大きい場合は正の整数を返す
* @throws ClassCastException 指定されたオブジェクトの型が原因で、
* この Object と比較できない場合
*/
int compareTo(Object o)
を実装しているクラス。
- Sort
java.util.Arrays#sort(Object[] a)
java.util.Collections#sort(Object[] a)
でソートされる。
Comparableインタフェースを実装していないクラスをソートする場合 †
- java.util.Comparator インタフェースを実装した、比較用のクラスを作成する。
比較用のクラスとは、
/**
* @param o1 比較対象の最初のオブジェクト
* @param o2 比較対象の 2 番目のオブジェクト
* @return 最初の引数が 2 番目の引数より小さい場合は負の整数、
* 両方が等しい場合は 0、最初の引数が 2 番目の引数より大きい場合は正の整数
* @throws ClassCastException 引数の型がこのコンパレータによる比較を妨げる場合
*/
public int compare(Object o1,Object o2)
を実装しているクラス。
- Sort
java.util.Arrays#sort(Object[] a , new ComparatorForA() )
java.util.Collections#sort(Object[] a , new ComparatorForA() )
でソートされる。
/*
* 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