2010-12-29 13 views
1

Java 5には自動ボクシングがあるので、プリミティブをソートするためにコンパレータを使用できないのはなぜですか? intIntegerにはラップされませんか?プリミティブをソートするためにコンパレータを使用できないのはなぜですか?

+0

コンパレータはジェネリックを使用して定義され、ジェネリックスはプリミティブを処理しません。しかし、Arrays.sort()はComparatorを使用しません...おそらくあなたがしようとしていることを説明することができます。 –

+0

@Peter LawreyはSCJP試験のためだけに勉強しています。コンパレータとラッピングの何が問題なのか疑問に思っています。 –

答えて

5

Arrays.sort(..)には、プリミティブ配列をソートするための専用のオーバーロードがあります。

標準のものとは別の特別な仕分けルールが必要な場合は、オートボックスを使用する必要があります。それに加えて、int[]は自動ボックス化されていないので、配列をInteger[]に変換する必要があります。

あなたが配列について話しているのではなく、コレクションについて言えば、あなたは選択肢がありません。コレクションはオブジェクトだけを保持できます。

+1

コンパイラは使用しません。 –

+0

コレクションがプリミティブを保持できないのは私の疑問です。整数を使用すると、オブジェクトになります。 –

+1

コレクションはGenericsを使用して定義され、Genericsはプリミティブをサポートしません。 http://trove.starlight-systems.com/のようなプリミティブのコレクションを持つことはできますが、これらは標準インターフェースに準拠していません。 –

4

Comparator<T> - または他のパラメータ化された型のパラメータをプリミティブ型でパラメータ化することはできません。

はい、これは大変厄介です... List<int>Map<String, boolean>などは作成できません。オブジェクトタイプとプリミティブの両方で機能する汎用メソッドを記述することはできません。あなたは、8つのプリミティブ型のそれぞれに専用のメソッドを持たなければなりません。しかし、これはJava 1以来ずっと続けられてきた設計です。

Bozhoが指摘するように、Arrays.sort(...)は必要なすべてのソート方法を提供します。

関連する問題