我想将由0和1组成的String转换为位数组。字符串的长度约为30000,且稀疏(大多数为0s,少数为1s)例如,给定一个字符串“ 0000000010000000001000010000100000000001000”我想将其转换为将存储的位数组[0000000010000000001000010000100000000001000]我正在考虑使用BitSet或OpenBitSet有没有更好的办法?用例是有效执行逻辑或。我正在沿着这些思路思考final OpenBitSet logicalOrResult = new OpenBitSet();for (final String line : lines) { final OpenBitSet myBitArray = new OpenBitSet(); int pos = 0; for (final char c : str.toCharArray()) { myBitArray.set(pos) = c; pos++; } logicalOrResult.or(myBitArray);} 最佳答案 一个BitSet范围在0和30000之间的值需要一个小于500的long数组,因此您可以假定BitSet.or(或相应的OpenBitSet方法)足够快,尽管稀疏。看起来OpenBitSet具有比BitSet更好的性能,但是除此之外,使用哪一个并不重要,两者都将有效地实现or。但是,请确保将String的长度传递给(Open)BitSet构造函数,以避免在构造期间重新分配内部long数组!如果字符串更长,并且稀疏度极高,则还可以考虑将它们存储为Integer的排序列表(如果使用Trove之类的库,则为int),表示包含。可以按类似于merge(sort)的方式实现按位1,这非常有效(时间O(n + m),其中n,m是每个字符串中1的数量)。我怀疑在您的情况下,它会比or方法慢。 10-05 18:33