2016-07-21 21 views
1

Ich habe eine Funktion, in der ich Operationen wie OR, AND, Set und andere ausführen möchte. Ich dachte zuerst über ein Array von booleschen Werten nach, aber das Problem dabei ist, dass ich die UND- und ODER-Operationen nicht ausführen kann (ich könnte jedoch ein bestimmtes Element auf true setzen). Ich habe auch versucht, BiSet zu verwenden, aber das Problem ist, dass die minimale Größe von BitSet 64 (Bits) ist. Ich möchte, dass es eine bestimmte Anzahl von Bits (15 zum Beispiel) speichert, aus denen ich später durchgehen kann, um ihre Inhalte zu erhalten. In C# gibt es die BitArray-Klasse, die sich mit einem solchen Problem beschäftigt; Java scheint das nicht zu haben. Irgendwelche Vorschläge für dieses Problem werden sehr geschätztErstellen eines BitSet bestimmter Länge in Java

+0

Warum erfüllt '' 'new BitSet (15)' '' nicht Ihre Anforderungen? – cdelmas

+0

Also, die wirklich interessante Frage ist eher: Was hat dir den falschen Eindruck gegeben? – GhostCat

+0

@cdelmas, ich sagte das, weil, wenn ich zum Beispiel: BitSet a = neue BiSet (15), nachdem ich a.length aufrufen, bekomme ich 64. – user3841581

Antwort

5

Ich denke, dass Sie sich irren. java.util.Bitset ermöglicht eine beliebige Anzahl von Bits; Es gibt keine Einschränkung "nur> 64 Bit". Ja, das Bitset verwendet wahrscheinlich intern lange Werte, um diese Bits zu speichern. aber nirgends heißt es, dass man nur 64 bit, 128 und so verwenden kann.

Mit anderen Worten: Wenn Sie einen Bitsatz für 15 Bits einrichten, wird er long[1] zuweisen; dasselbe für 63 Bits; und wenn Sie 70 Bits benötigen, wird es long[2] zuweisen.

Lange Rede kurzer Sinn: Diese Klasse ist genau das, was Sie suchen; und ich sehe nicht, dass irgendeine andere Implementierung wesentlich effizienter sein könnte.

+0

danke für die klare Erklärung, Es ist mir jetzt klar . Kann ich auch ein Array von BiSet erstellen, und wenn ja, wie durchlaufe ich sie? – user3841581

+0

Nun, wahrscheinlich würden Sie beginnen, indem Sie ein paar Bücher über Java lesen. Sie sehen, das ist keine "Programmierschule", wo Leute Ihnen Dinge erzählen, die wirklich überall dokumentiert sind. Aber gut; Sie würden nach 'Bitset [] mySets = neues BitSet [] {neues BitSet (5), neues BitSet (6), ..}' gehen. Aber 2016 möchten Sie wahrscheinlich dynamische Sammlungen verwenden, wie zum Beispiel 'List mySets = new ArrayList <>()' ... und dann fügen Sie BitSet-Objekte nach Bedarf hinzu. Aber wie gesagt: Das sind wirklich grundlegende Dinge, die du durch * Studieren * lernst; nicht indem man Leute auf stackoverflow fragt. – GhostCat