回答編集履歴
2
メソッドシグナチャーを変更
test
CHANGED
@@ -1,20 +1,22 @@
|
|
1
|
-
int[][]は二次元配列ですね。それに適用できるArrays#sortメソッドは以下の2
|
1
|
+
int[][]は二次元配列ですね。それに適用できるArrays#sortメソッドは概ね以下の2種類(Comparatorを指定しないものとするもの)になります。
|
2
2
|
|
3
3
|
|
4
4
|
|
5
|
+
(1-1) static void sort(Object[] a)
|
6
|
+
|
5
|
-
(1) static <T extends Comparable<? super T>> void
|
7
|
+
(1-2) static <T extends Comparable<? super T>> void parallelSort(T[] a)
|
6
8
|
|
7
9
|
指定されたオブジェクト配列を、その要素の自然順序付けに従って昇順にソートします。
|
8
10
|
|
9
11
|
|
10
12
|
|
11
|
-
(2) static <T> void sort(T[] a, Comparator<? super T> cmp)
|
13
|
+
(2-1) static <T> void sort(T[] a, Comparator<? super T> cmp)
|
14
|
+
|
15
|
+
(2-2) static <T> void parallelSort(T[] a, Comparator<? super T> cmp)
|
12
16
|
|
13
17
|
指定されたコンパレータが示す順序に従って、指定されたオブジェクトの配列をソートします。
|
14
18
|
|
15
19
|
|
16
|
-
|
17
|
-
(また上記と同じ考え方で並列処理ができるparallelSortという名前のメソッドもあります。)
|
18
20
|
|
19
21
|
|
20
22
|
|
@@ -26,7 +28,7 @@
|
|
26
28
|
|
27
29
|
|
28
30
|
|
29
|
-
さて、T(本ケースではT=int[])は自然順序付けができるなら(1)が適用できます。一般に参照型であれば
|
31
|
+
さて、T(本ケースではT=int[])は自然順序付けができるなら(1-*)が適用できます。一般に参照型であれば
|
30
32
|
|
31
33
|
|
32
34
|
|
@@ -35,6 +37,8 @@
|
|
35
37
|
|
36
38
|
|
37
39
|
のように「このクラスは比較できますよ」という定義になっているものに対して「自然順序付けされている」と考えるとよいと思います。ここでT(=int[])は自然順序付けされていません。intの配列の大小をどのように決めるかはJavaでは「決まっていない」からです。
|
40
|
+
|
41
|
+
**parallelSortの方(1-2)は「ComparableであるようなTを指定することが強制される」ので、比較できない型を指定していることにコンパイル時に気づけますが(1-1)を使うと実行してみないと気づけないという落とし穴があります**
|
38
42
|
|
39
43
|
|
40
44
|
|
1
parallelSortではなくsortに変更
test
CHANGED
@@ -2,15 +2,19 @@
|
|
2
2
|
|
3
3
|
|
4
4
|
|
5
|
-
(1) static <T extends Comparable<? super T>> void
|
5
|
+
(1) static <T extends Comparable<? super T>> void sort(T[] a)
|
6
6
|
|
7
7
|
指定されたオブジェクト配列を、その要素の自然順序付けに従って昇順にソートします。
|
8
8
|
|
9
9
|
|
10
10
|
|
11
|
-
(2) static <T> void
|
11
|
+
(2) static <T> void sort(T[] a, Comparator<? super T> cmp)
|
12
12
|
|
13
13
|
指定されたコンパレータが示す順序に従って、指定されたオブジェクトの配列をソートします。
|
14
|
+
|
15
|
+
|
16
|
+
|
17
|
+
(また上記と同じ考え方で並列処理ができるparallelSortという名前のメソッドもあります。)
|
14
18
|
|
15
19
|
|
16
20
|
|