如何为BitSet类型的元素创建SortedSet(例如TreeSet)

Kau*_*aur 5 java comparable classcastexception bitset

我有许多(power(2,k))BitSet对象,我想将它们存储在一个SortedSet.我用的代码是:

Set <BitSet> S= new TreeSet<>();
Run Code Online (Sandbox Code Playgroud)

但是,我收到此错误: java.lang.ClassCastException: java.util.BitSet cannot be cast to java.lang.Comparable

如何实现类似的界面?或者有没有其他方法来排序这些类型的元素BitSet

ILM*_*tan 9

有两种方法可以使用TreeSet.

  1. 它包含实现的对象 Comparable
  2. 有一个自定义Comparator对象,可以比较你的元素TreeSet.

由于您希望拥有自己的TreeSet包含BitSet,并且BitSet未实现Comparable,因此您需要提供TreeSet自定义Comparator.你如何实现这Comparator一点取决于你.

SortedSet<BitSet> s = new TreeSet<BitSet>(new CustomBitSetComparator());
s.add(bitSet1);
s.add(bitSet2);
//etc ...
Run Code Online (Sandbox Code Playgroud)

比较器可能看起来像这样

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;
         }
    }
}
Run Code Online (Sandbox Code Playgroud)