@Override
	  public void and(NIOFilter filter) {
	    if(filter == null
	        || !(filter instanceof AdjustedCountingBloomFilter)
	        || filter.vectorSize != this.vectorSize
	        || filter.nbHash != this.nbHash) {
	      throw new IllegalArgumentException("filters cannot be and-ed");
	    }
	    AdjustedCountingBloomFilter cbf = (AdjustedCountingBloomFilter) filter;
	    
	    int sizeInWords = buckets2words(vectorSize);
	    for(int i = 0; i < sizeInWords; i++) {
	    	boolean hasUpdatedSuccess = false;   // 是否更新成功
	    	int retriedTimes = 0;   // 已重试次数
	    	while(!hasUpdatedSuccess && retriedTimes < MAX_UPDATE_RETRY_TIMES) {
	    		long oldVal = buckets[i].get();
	    		hasUpdatedSuccess = buckets[i].compareAndSet(oldVal, oldVal & cbf.buckets[i].get());
	    	  
	    		retriedTimes++;
	    	}   // while ends
	    	
		    // do log
		    if(!hasUpdatedSuccess && retriedTimes == MAX_UPDATE_RETRY_TIMES) {
		        LOG.error("collision occurn: and");
		    }
	    }
	  }