Skip to content

Commit e22a197

Browse files
author
Yegor Bugayenko
committed
bug fixed
1 parent 3544416 commit e22a197

File tree

2 files changed

+41
-7
lines changed

2 files changed

+41
-7
lines changed

src/main/java/com/jcabi/immutable/ArrayComparator.java

Lines changed: 33 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@
3030
package com.jcabi.immutable;
3131

3232
import com.jcabi.aspects.Immutable;
33+
import java.io.Serializable;
34+
import java.util.Comparator;
3335

3436
/**
3537
* Comparator for arrays.
@@ -40,17 +42,26 @@
4042
* @since 1.0
4143
*/
4244
@Immutable
43-
public interface ArrayComparator<T> extends java.util.Comparator<T> {
45+
@SuppressWarnings("unchecked")
46+
public interface ArrayComparator<T> extends Comparator<T> {
4447

4548
/**
4649
* Default comparator.
4750
* @param <T> Type of argument
4851
*/
4952
@Immutable
50-
final class Default<T> implements ArrayComparator<T> {
53+
final class Default<T> implements ArrayComparator<T>, Serializable {
54+
/**
55+
* Serialization marker.
56+
*/
57+
private static final long serialVersionUID = 0x54ef44fb3ef2efa3L;
58+
@Override
59+
public String toString() {
60+
return "DEFAULT";
61+
}
5162
@Override
5263
public int compare(final T left, final T right) {
53-
return Comparable.class.cast(left).compareTo(right);
64+
return ((Comparable<T>) left).compareTo(right);
5465
}
5566
}
5667

@@ -59,7 +70,15 @@ public int compare(final T left, final T right) {
5970
* @param <T> Type of argument
6071
*/
6172
@Immutable
62-
final class Neutral<T> implements ArrayComparator<T> {
73+
final class Neutral<T> implements ArrayComparator<T>, Serializable {
74+
/**
75+
* Serialization marker.
76+
*/
77+
private static final long serialVersionUID = 0x54ef489b3ef2eca3L;
78+
@Override
79+
public String toString() {
80+
return "NEUTRAL";
81+
}
6382
@Override
6483
public int compare(final T left, final T right) {
6584
return 1;
@@ -71,10 +90,18 @@ public int compare(final T left, final T right) {
7190
* @param <T> Type of argument
7291
*/
7392
@Immutable
74-
final class Reverse<T> implements ArrayComparator<T> {
93+
final class Reverse<T> implements ArrayComparator<T>, Serializable {
94+
/**
95+
* Serialization marker.
96+
*/
97+
private static final long serialVersionUID = 0x545f489d3ed2eca3L;
98+
@Override
99+
public String toString() {
100+
return "REVERSE";
101+
}
75102
@Override
76103
public int compare(final T left, final T right) {
77-
return Comparable.class.cast(right).compareTo(left);
104+
return ((Comparable<T>) right).compareTo(left);
78105
}
79106
}
80107

src/main/java/com/jcabi/immutable/ArraySortedSet.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,14 @@ public ArraySortedSet(final Iterable<T> set,
122122
}
123123
this.cmp = comparator;
124124
if (set instanceof ArraySortedSet) {
125-
this.values = ((ArraySortedSet<T>) set).values;
125+
final ArraySortedSet<T> origin = (ArraySortedSet<T>) set;
126+
if (origin.cmp.equals(this.cmp)) {
127+
this.values = origin.values;
128+
} else {
129+
final Set<T> hset = new TreeSet<T>(this.cmp);
130+
hset.addAll(Collection.class.cast(set));
131+
this.values = hset.toArray((T[]) new Object[hset.size()]);
132+
}
126133
} else if (set instanceof Collection) {
127134
final Set<T> hset = new TreeSet<T>(this.cmp);
128135
hset.addAll(Collection.class.cast(set));

0 commit comments

Comments
 (0)