问题描述
我有许多(power(2,k))
的BitSet对象,我想将它们存储在 SortedSet $ c中$ c>。我使用代码:
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<>();
但是,我收到此错误: java.lang.ClassCastException:java .util.BitSet无法转换为java.lang.Comparable
However, I am getting this error: java.lang.ClassCastException: java.util.BitSet cannot be cast to java.lang.Comparable
如何实现可比较的接口?还是有其他方法可以对这些类型为 BitSet
的元素进行排序?
How do I implement comparable interface? Or is there any other way to sort these elements of type BitSet
?
推荐答案
有两种方法可以使用 TreeSet
。
- 包含对象实现
Comparable
- 具有自定义
Comparator
对象的对象,该对象用于比较您的TreeSet
。
- Have it contain objects that implement
Comparable
- Have a custom
Comparator
object that compares the elements of yourTreeSet
.
因为您想拥有 TreeSet
包含 BitSet
s,而 BitSet
不实现可比的
,您需要给 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;
}
}
}
这篇关于如何为BitSet类型的元素创建SortedSet(例如TreeSet)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!