java中的位旋转-幂集,按大小排序
接下来,我希望减少使用该方法的方法,一个无缓冲版本,因为数组的生命周期仅限于此对象。这是一些长基的迭代方法;集合的实际内容不会被存储——这将占用大量内存,并且只有当人们想要在集合上迭代时,单个成员才感兴趣——因此成员由迭代器生成 但是,这些成员需要首先按大小顺序返回,而不是按字典顺序返回,即按位计数排序 下面是我工作的第一个剪辑;优化成瘾者有什么建议吗?我敢肯定这一个有更明显的切口java中的位旋转-幂集,按大小排序,java,bit-manipulation,Java,Bit Manipulation,接下来,我希望减少使用该方法的方法,一个无缓冲版本,因为数组的生命周期仅限于此对象。这是一些长基的迭代方法;集合的实际内容不会被存储——这将占用大量内存,并且只有当人们想要在集合上迭代时,单个成员才感兴趣——因此成员由迭代器生成 但是,这些成员需要首先按大小顺序返回,而不是按字典顺序返回,即按位计数排序 下面是我工作的第一个剪辑;优化成瘾者有什么建议吗?我敢肯定这一个有更明显的切口 public Iterator<Long> iterator() { return new Itera
public Iterator<Long> iterator() { return new Iterator<Long>(){
private boolean hasNext = true;
@Override public boolean hasNext() { return hasNext; }
private final long[] split = BitTwiddling.decompose(base);
int size = 0;
private long next = 0;
private long lastOfSize = 0;
private long firstOfSize = 0;
int[] positions = new int[split.length];
@Override
public Long next() {
long result = next;
if (next == lastOfSize) {
if (size == split.length) {
hasNext = false;
return result;
}
next = (firstOfSize |= split[size]);
lastOfSize |= split[split.length - ++size];
for(int i=0; i<size; i++) positions[i] = i;
} else {
if (positions[size-1] == split.length-1) {
int index = size-1;
int ref = split.length - 1;
while (positions[index] == ref) { index--; next ^= split[ref--]; }
next ^= split[positions[index]++];
next |= split[positions[index++]];
do {
next |= split[positions[index] = positions[index-1]+1];
} while (++index < size);
} else {
next ^= split[positions[size-1]++];
next |= split[positions[size-1]];
}
}
return result;
}
如果我正确理解问题,你想如果我正确理解问题,你想