我需要为HashSet创建一个reallocate方法。我将实现添加和删除方法,这样,如果加载因子分别大于1或小于0.5,我会增加或减小其大小。 loadFactor =集合的元素/大小。到目前为止,这是我的工作,但每当我需要增加集合的大小时,我就开始丢失元素。
public void reallocate() {
double loadFactor = (double) currentSize / buckets.length;
Node[] newBuckets;
if (loadFactor > 1) {
newBuckets = new Node[buckets.length * 2];
for (Node bucket : buckets) {
if (bucket != null) {
int h = bucket.hashCode();
h = Math.abs(h % newBuckets.length);
newBuckets[h] = bucket;
}
}
buckets = newBuckets;
} else if (loadFactor < 0.5) {
newBuckets = new Node[buckets.length / 2];
for (Node bucket : buckets) {
if (bucket != null) {
int h = bucket.hashCode();
h = Math.abs(h % newBuckets.length);
newBuckets[h] = bucket;
}
}
buckets = newBuckets;
}
}
原始数组是存储桶,我创建了具有所选大小的newBuckets。使用循环将每个元素复制到newBuckets,然后设置buckets = newBuckets。我更喜欢一些建议,而不是把解决方案交给我,因为我想学习如何做到这一点。