192.168.1.43_20200907-田福申

日志

问题

当运行时总会发生漏删

    @Override
    public boolean retainAll(Collection<?> c) {
        if(c instanceof Bag && c.size()<=this.size()) {
            Bag b=(Bag)c;
            for (int i = 0; i < counter ; i++) {
                if(!b.contains( elements[ i ] )) {
                    this.remove(elements[ i ]);
                }
            }
        }
        return true;
    }

解决

漏删的原因是数组的元素索引改变了,但是循环还没有改变,所以增加i--,每次删除后都进行一次,保证循环和索引一致。

    @Override
    public boolean retainAll(Collection<?> c) {
        if(c instanceof Bag && c.size()<=this.size()) {
            Bag b=(Bag)c;
            for (int i = 0; i < counter ; i++) {
                if(!b.contains( elements[ i ] )) {
                    this.remove(elements[ i ]);
                    i--;
                }
            }
        }
        return true;
    }