teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

メソッドシグナチャーを変更

2017/06/13 02:47

投稿

KSwordOfHaste
KSwordOfHaste

スコア18404

answer CHANGED
@@ -1,22 +1,24 @@
1
- int[][]は二次元配列ですね。それに適用できるArrays#sortメソッドは以下の2になります。
1
+ int[][]は二次元配列ですね。それに適用できるArrays#sortメソッドは概ね以下の2種類(Comparatorを指定しないものとするもの)になります。
2
2
 
3
+ (1-1) static void sort(Object[] a)
3
- (1) static <T extends Comparable<? super T>> void sort(T[] a)
4
+ (1-2) static <T extends Comparable<? super T>> void parallelSort(T[] a)
4
5
  指定されたオブジェクト配列を、その要素の自然順序付けに従って昇順にソートします。
5
6
 
6
- (2) static <T> void sort(T[] a, Comparator<? super T> cmp)
7
+ (2-1) static <T> void sort(T[] a, Comparator<? super T> cmp)
8
+ (2-2) static <T> void parallelSort(T[] a, Comparator<? super T> cmp)
7
9
  指定されたコンパレータが示す順序に従って、指定されたオブジェクトの配列をソートします。
8
10
 
9
- (また上記と同じ考え方で並列処理ができるparallelSortという名前のメソッドもあります。)
10
11
 
11
12
  intを要素とするsortもありますがそれは一次元に限ります。二次元の配列はこう考えます。
12
13
 
13
14
  int[][]は「int[]を要素とする一次元配列」「int[]はintではなく配列。配列はプリミティブ型ではなくて参照型の一種なので前述のどちらかにしか適用できない。
14
15
 
15
- さて、T(本ケースではT=int[])は自然順序付けができるなら(1)が適用できます。一般に参照型であれば
16
+ さて、T(本ケースではT=int[])は自然順序付けができるなら(1-*)が適用できます。一般に参照型であれば
16
17
 
17
18
  class X implements Comparable<X>
18
19
 
19
20
  のように「このクラスは比較できますよ」という定義になっているものに対して「自然順序付けされている」と考えるとよいと思います。ここでT(=int[])は自然順序付けされていません。intの配列の大小をどのように決めるかはJavaでは「決まっていない」からです。
21
+ **parallelSortの方(1-2)は「ComparableであるようなTを指定することが強制される」ので、比較できない型を指定していることにコンパイル時に気づけますが(1-1)を使うと実行してみないと気づけないという落とし穴があります**
20
22
 
21
23
  (2)を使えば「比較順序を明示できる」ので以下のようにしてソートできます。
22
24
 

1

parallelSortではなくsortに変更

2017/06/13 02:47

投稿

KSwordOfHaste
KSwordOfHaste

スコア18404

answer CHANGED
@@ -1,11 +1,13 @@
1
1
  int[][]は二次元配列ですね。それに適用できるArrays#sortメソッドは以下の2つになります。
2
2
 
3
- (1) static <T extends Comparable<? super T>> void parallelSort(T[] a)
3
+ (1) static <T extends Comparable<? super T>> void sort(T[] a)
4
4
  指定されたオブジェクト配列を、その要素の自然順序付けに従って昇順にソートします。
5
5
 
6
- (2) static <T> void parallelSort(T[] a, Comparator<? super T> cmp)
6
+ (2) static <T> void sort(T[] a, Comparator<? super T> cmp)
7
7
  指定されたコンパレータが示す順序に従って、指定されたオブジェクトの配列をソートします。
8
8
 
9
+ (また上記と同じ考え方で並列処理ができるparallelSortという名前のメソッドもあります。)
10
+
9
11
  intを要素とするsortもありますがそれは一次元に限ります。二次元の配列はこう考えます。
10
12
 
11
13
  int[][]は「int[]を要素とする一次元配列」「int[]はintではなく配列。配列はプリミティブ型ではなくて参照型の一種なので前述のどちらかにしか適用できない。