code: @Override
    public FastSet difference(IntSet other)
    {
      if (other == null || other.isEmpty()) {
        return clone();
      }
      if (other == this || isEmpty()) {
        return empty();
      }
  
      final FastSet o = convert(other);
      FastSet res = new FastSet(firstEmptyWord);
      res.firstEmptyWord = firstEmptyWord;
  
      final int[] localWords = words;     // faster
      final int[] localOtherWords = o.words;   // faster
      final int[] localResWords = res.words;   // faster
  
      int i = 0;
      final int m = Math.min(firstEmptyWord, o.firstEmptyWord);
      for (; i < m; i++) {
        localResWords[i] = localWords[i] & ~localOtherWords[i];
      }
      if (i < firstEmptyWord) {
        System.arraycopy(localWords, i, localResWords, i, firstEmptyWord - i);
      } else {
        res.fixFirstEmptyWord();
      }
      res.size = -1;
      return res;
    }
docs: {@inheritDoc}