@@ -7,25 +7,25 @@ public class BucketSort {
7
7
8
8
private static final int BUCKETS_COUNT = 10 ;
9
9
10
- public static <T extends Comparable > void apply (T [] items ) {
10
+ public static <T extends Comparable < T > > void apply (T [] items ) {
11
11
// Prepare empty buckets
12
- List <List <Comparable >> buckets = new ArrayList <>(BUCKETS_COUNT );
12
+ List <List <Comparable < T > >> buckets = new ArrayList <>(BUCKETS_COUNT );
13
13
for (int i = 0 ; i < BUCKETS_COUNT ; i ++) {
14
14
buckets .add (new ArrayList <>());
15
15
}
16
16
17
17
// Fill in buckets
18
- for (T t : items ) {
19
- var bucketIndex = determineBucketIndex (t , BUCKETS_COUNT );
18
+ for (var t : items ) {
19
+ var bucketIndex = determineBucketIndex (t );
20
20
buckets .get (bucketIndex ).add (t );
21
21
}
22
22
23
23
int currIndex = 0 ;
24
24
for (int bucketIndex = 0 ; bucketIndex < BUCKETS_COUNT ; bucketIndex ++) {
25
- List < Comparable > bucket = buckets .get (bucketIndex );
25
+ var bucket = buckets .get (bucketIndex );
26
26
27
27
// Sort elements in each bucket
28
- Comparable [] array = bucket .toArray (new Comparable [0 ]);
28
+ var array = bucket .toArray (new Comparable [0 ]);
29
29
InsertionSort .apply (array );
30
30
31
31
// Populate the result array with values from bucket
@@ -39,29 +39,29 @@ public static <T extends Comparable> void apply(T[] items) {
39
39
/**
40
40
* Not found better way, but sorter parameterized now
41
41
*/
42
- private static int determineBucketIndex (Comparable element , int bucketsCount ) {
42
+ private static < T > int determineBucketIndex (Comparable < T > element ) {
43
43
if (element instanceof Integer ) {
44
- return (int ) ((bucketsCount - 1 ) *
44
+ return (int ) ((BUCKETS_COUNT - 1 ) *
45
45
((Integer ) element - (double ) Integer .MIN_VALUE ) / ((double ) Integer .MAX_VALUE - (double ) Integer .MIN_VALUE ));
46
46
}
47
47
if (element instanceof Long ) {
48
- return (int ) ((bucketsCount - 1 ) *
48
+ return (int ) ((BUCKETS_COUNT - 1 ) *
49
49
((Long ) element - (double ) Long .MIN_VALUE ) / ((double ) Long .MAX_VALUE - (double ) Long .MIN_VALUE ));
50
50
}
51
51
if (element instanceof Double ) {
52
- return (int ) ((bucketsCount - 1 ) *
52
+ return (int ) ((BUCKETS_COUNT - 1 ) *
53
53
((Double ) element - Double .MIN_VALUE ) / (Double .MAX_VALUE - Double .MIN_VALUE ));
54
54
}
55
55
if (element instanceof Float ) {
56
- return (int ) ((bucketsCount - 1 ) *
56
+ return (int ) ((BUCKETS_COUNT - 1 ) *
57
57
((Float ) element - Float .MIN_VALUE ) / (Float .MAX_VALUE - Float .MIN_VALUE ));
58
58
}
59
59
if (element instanceof Byte ) {
60
- return (bucketsCount - 1 ) *
60
+ return (BUCKETS_COUNT - 1 ) *
61
61
((Byte ) element - Byte .MIN_VALUE ) / (Byte .MAX_VALUE - Byte .MIN_VALUE );
62
62
}
63
63
if (element instanceof Short ) {
64
- return (bucketsCount - 1 ) *
64
+ return (BUCKETS_COUNT - 1 ) *
65
65
((Short ) element - Byte .MIN_VALUE ) / (Short .MAX_VALUE - Short .MIN_VALUE );
66
66
}
67
67
0 commit comments