I have a number (power(2,k))
of BitSet objects and I want to store them in a SortedSet
. I use the code:
Set <BitSet> S= new TreeSet<>();
However, I am getting this error: java.lang.ClassCastException: java.util.BitSet cannot be cast to java.lang.Comparable
How do I implement comparable interface? Or is there any other way to sort these elements of type BitSet
?
There are two ways to use a TreeSet
.
Comparable
Comparator
object that compares the elements of your TreeSet
.Since you want to have your TreeSet
contain BitSet
s, and BitSet
does not implement Comparable
, you need to give your TreeSet
a custom Comparator
. How you implement that Comparator
is up to you.
SortedSet<BitSet> s = new TreeSet<BitSet>(new CustomBitSetComparator());
s.add(bitSet1);
s.add(bitSet2);
//etc ...
The Comparator may look something like this
class CustomBitSetComparator implements Comparator<BitSet>{
int compare(BitSet a, BitSet b) {
if(a == b){
return 0;
} else if(a == null) {
return -1;
} else if(b == null) {
return 1;
} else if(a.equals(b)) {
return 0;
} else if(a.length() > b.length()) {
return 1;
} else if(b.lenght() > a.length()) {
return -1;
} else {
for(int i = 0; i < a.length(); i++) {
if(a.get(i) != b.get(i)) {
if(a.get(i)) {
return 1;
} else {
return -1;
}
}
}
return 0;
}
}
}