有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java创建有限哈希集

所以,我试图创建有限的HashSet,所以每当LimitedHashSet超过1024个元素时,它就会抛出一个Error不要问,指令。 这是我到目前为止的代码

import java.util.HashSet;
public class LimitedHashSet<E> extends HashSet<E>{
    public LimitedHashSet(){
        super();
    }

    @Override
    public int size() {
        return super.size();
    }

    private class LimitedHashSetError{
        LimitedHashSetError(){
            if (size() > 1024){
                throw new Error("LimitedHashSetError");
            }
        }
    }
    public static void main(String[] args) {
            LimitedHashSet<Integer> lhs = new LimitedHashSet<>();
            for (int i = 0; i < 1026 ; i++) {
                lhs.add(i);
            }
        }
}

然而,什么也没有发生


共 (3) 个答案

  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. # 2 楼答案

    你从不实例化LimitedHashSetError,所以你从不检查大小。我更喜欢在每次^{之后调用的检查方法:

    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");
            }
        }
    }
    
  3. # 3 楼答案

    您应该重写类中的两个方法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);
    }