Нет, операторы не перегружены, потому что: a) в Java нет перегрузки оператора; b) то, что вы ожидаете, является неправильным и нелогичным.
BitSet, как и название, означает набор бит. Вы не можете сказать «большой» и «меньший» набор - это похоже на то, что один цвет «больше», чем другой. Если вы хотите сравнить битовые наборы, вам нужно создать сравнительный показатель - Я думаю, что вы хотите сравнить значения целых чисел, созданных с битов - если это так, используйте код, например. BitSet to and from integer/long, а затем вызвать
static int compare(BitSet bs1, BitSet bs2) {
return Long.compare(Bits.convert(bs1),Bits.convert(bs2));
}
или, как Comparator
,
class BitSetComparator implements Comparator<BitSet> {
int compare(BitSet bs1, BitSet bs2) {
return Long.compare(Bits.convert(bs1),Bits.convert(bs2));
}
}
Обратите внимание, что в данном конкретном случае оба набора должны вписываться в long
(63 бит макс). Кроме того, предполагается, что ваш показатель является «множество с более целого числа без знака представления больше», вы можете использовать XORing или петлю через биты, или любой другой конструкции, которая проходит через все биты -
int compare(BitSet bs1, BitSet bs2) {
BitSet x = ((BitSet)bs1.clone()).xor(bs2);
return (x.isEmpty()) ? 0 : (x.length() == bs2.length() ? 1 : -1);
}
, но в все эти случаи, если вы нацелились на , сравнивая ваши биты, лучше всего использовать long
для хранения ваших данных, а затем сравнить его как неподписанные значения, используя https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html#compareUnsigned-long-long- - в противном случае вы теряете пространство, чтобы повысить эффективность работы бит-памяти с помощью преобразований «взад-вперед», чтобы справиться с ситуацией, основанной на использовании класса для вещей, для которых он не предназначен. Оба BitSet#xor()
& (особенно) BitSet#length()
- это не легкие операции, которые вы ожидаете от бит ops, в основном из-за recalculateWordsInUse();
, checkInvariants();
& Long.numberOfLeadingZeros()
Используется в них. В общем, все методы, кроме использования целого целого (особенно любой сравнительный код, как показано выше), приведут к серьезной потере производительности в любых сценариях, зависящих от производительности.
не существует перегрузка операторов в Java. вы можете написать функцию или использовать предопределенный интерфейс, например Comparable – Adem