创建有限的HashSet

时间:2017-06-12 12:55:06

标签: java hashset

所以,我正在尝试创建有限的worker worker = new worker(); ThreadStart i2c_sender_ref = new ThreadStart(worker.i2c_worker); Thread i2c_sender = new Thread(i2c_sender_ref); i2c_sender.Start(); ,因此每当HashSet超过1024个元素时,它就会抛出LimitedHashSet不要问,说明。 到目前为止,这是我的代码,

Error

然而,没有任何反应。

3 个答案:

答案 0 :(得分:4)

您永远不会实例化LimitedHashSetError,因此您永远不会检查尺寸。我希望在每add(All)之后调用一个check-method:

public class LimitedHashSet<E> extends HashSet<E>{

    @Override
    public boolean add(E e) {
        boolean result = super.add(e);
        checkSize();
        return result;
    }

    @Override
    public boolean addAll(Collection<? extends E> c) {
        boolean result = super.addAll(c);
        checkSize();
        return result;
    }

    private void checkSize() {
        if (size() > 1024){
            throw new Error("LimitedHashSetError");
        }
    }
}

答案 1 :(得分:1)

你应该这样做:

@Override
public boolean add(E e) {
    boolean x = super.add(e);
    if (size() > 1024) {
        throw new Error("Limited Hash Set Error");
    }
    return x;
}

@Override
public boolean addAll(Collection<? extends E> c) {
    boolean x = super.addAll(c);
    if (size() > 1024) {
        throw new Error("LimitedHashSetError");
    }
    return x;

}

答案 2 :(得分:0)

您应该在班级中覆盖两个方法addAlladd

@Override
public boolean addAll(final Collection<? extends E> c) {
    boolean a = true;
    for(final E e: c) {
        a = a && add(e);
    }
    return a;
}

@Override
public boolean add(final E e) {
    if (size() + 1 > 1024 && !contains(e)){
        throw new Error("LimitedHashSetError");
    }
    return super.add(e);
}