code: public void delete(Key key) {
      if(key == null) {
        throw new NullPointerException("Key may not be null");
      }
      if(!membershipTest(key)) {
        throw new IllegalArgumentException("Key is not a member");
      }
  
      int[] h = hash.hash(key);
      hash.clear();
  
      for(int i = 0; i < nbHash; i++) {
        // find the bucket
        int wordNum = h[i] >> 4;          // div 16
        int bucketShift = (h[i] & 0x0f) << 2;  // (mod 16) * 4
        
        long bucketMask = 15L << bucketShift;
        long bucketValue = (buckets[wordNum] & bucketMask) >>> bucketShift;
        
        // only decrement if the count in the bucket is between 0 and BUCKET_MAX_VALUE
        if(bucketValue >= 1 && bucketValue < BUCKET_MAX_VALUE) {
          // decrement by 1
          buckets[wordNum] = (buckets[wordNum] & ~bucketMask) | ((bucketValue - 1) << bucketShift);
        }
      }
    }
docs: Removes a specified key from <i>this</i> counting Bloom filter.
  <p>
  <b>Invariant</b>: nothing happens if the specified key does not belong to <i>this</i> counter Bloom filter.
  @param key The key to remove.