重新分配HashSet的方法

时间:2018-04-26 23:53:18

标签: java dynamic hash hashset

我需要为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。我更喜欢一些建议,而不是把解决方案交给我,因为我想学习如何做到这一点。

0 个答案:

没有答案