Java 如何为BitSet类型的元素创建SortedSet(如TreeSet)
我有一些Java 如何为BitSet类型的元素创建SortedSet(如TreeSet),java,classcastexception,comparable,bitset,Java,Classcastexception,Comparable,Bitset,我有一些(幂(2,k))位集对象,我想将它们存储在排序数据集中。我使用代码: Set <BitSet> S= new TreeSet<>(); Set S=new TreeSet(); 但是,我得到了这个错误:java.lang.ClassCastException:java.util.BitSet不能转换为java.lang.Comparable 如何实现可比较的接口?或者是否有其他方法对这些类型为位集的元素进行排序?使用树集有两种方法 使其包含实现可比性的对象 拥
(幂(2,k))
位集对象,我想将它们存储在排序数据集中。我使用代码:
Set <BitSet> S= new TreeSet<>();
Set S=new TreeSet();
但是,我得到了这个错误:java.lang.ClassCastException:java.util.BitSet不能转换为java.lang.Comparable
如何实现可比较的接口?或者是否有其他方法对这些类型为位集的元素进行排序?使用树集有两种方法
使其包含实现可比性的对象
拥有一个自定义的比较器
对象,用于比较树集的元素
由于您希望树集
包含位集
s,并且位集
不实现可比
,因此需要为树集
提供一个自定义的比较器
。如何实现比较器取决于您自己
SortedSet<BitSet> s = new TreeSet<BitSet>(new CustomBitSetComparator());
s.add(bitSet1);
s.add(bitSet2);
//etc ...
SortedSet s=新树集(新CustomBitSetComparator());
s、 添加(比特集1);
s、 添加(位设置2);
//等等。。。
比较器可能看起来像这样
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;
}
}
}
类CustomBitSetComparator实现Comparator{
整数比较(位集a、位集b){
如果(a==b){
返回0;
}else if(a==null){
返回-1;
}else如果(b==null){
返回1;
}否则,如果(a等于(b)){
返回0;
}如果(a.length()>b.length()){
返回1;
}否则如果(b.长度()>a.长度()){
返回-1;
}否则{
对于(int i=0;i
我不知道为什么要将位集放在树集中,而一个解决方法是创建一个实现可比较的接口的包装类
Public class CustomComparableBitSet implements Comparable{
private BitSet bs;
public int compareTo(T o){
//your comparison logic goes here.
}
}
然后在客户机代码中,将CustomComparableBitSet的实例添加到树集中,我会将它们转换为大整数(O(N))并使用树集。否则,你将不得不为自己编写一个比较器,从本质上讲,它的运行速度将非常缓慢,正如你从其他答案中看到的那样。我也会考虑使用PrimyQuey而不是SETU.你打算用什么代码<代码>()/<代码>?基数?目的是对该位集对象集合进行排序,以便进行比较。问题是位集
未实现比较
,因此您必须定义自己的位集
顺序。您想要的顺序是什么?我需要这些位集对象的升序。除了使用TreeSet,还有其他方法吗?定义升序。我有数千个位集对象,我需要先对它们进行排序以进一步处理(处理要求它们是升序)。所以我认为TreeSet是最好的数据结构。如果还有其他解决方法,请告诉我。好的,如果您有数千个位集对象,创建包装器对象可能不是一个好主意,因为它会带来一些内存开销。扩展位集类并实现可比性如何。公共类CustomeComparableBitSet扩展位集实现可比较{public int compareTo(T arg0){int i=0;//根据比较逻辑返回i;}}}对该排序集的输入来自程序的其他部分。所以我收到的是一个位集对象流,我必须收集、排序和处理这些对象。此处无法实现新的CustomBitSetComparator()!CustomBitSetComparator()
不包含任何位集。它比较了它们。它实现了比较器
,该比较器具有比较(位集,位集)
功能,树集
使用该功能比较传入的位集。你必须自己写这门课。