[英]Remove duplicates from Array using BitSet?
我正在尝试了解在 stackoverflow 上找到的以下语句的实现
可以使用BitSet,当你遍历数组值时,将相应的位设置为true。 然后你可以遍历位设置和 output 对应的值,只要你发现一个位设置为真
我知道从int
array
中删除重复项的非常简单的方法。 但是很难理解如何使用本网站上的上述声明来实现它。
参考链接
https://stackoverflow.com/questions/3667543/remove-duplicates-from-a-large-integer-array-using-java
谁能建议如何实施?
你可以这样做:
BitSet bs = new BitSet();
// walk the array of values
for (int i : array) {
// set the corresponding bit to true
bs.set(i);
}
// walk over the bit set
for (int i = 0; i < bs.size(); ++i) {
// output the corresponding value whenever you find a bit set to true
if (bs.get(i)) {
System.out.println(i);
}
}
正如ewramner所指出的, BitSet
不是稀疏的,因此这将为数组中最大值的所有内容分配足够的位。 如果数组中的值很少,或者它们都比零大很多,这可能会非常低效,将事物放入Set
(例如HashSet
或TreeSet
)将是更好的选择。
这是一种更有效地遍历 bitset 以查找真值的方法:
for (int i = -1; (i = bs.nextSetBit(i + 1)) != -1;) {
System.out.println(i);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.