code: @Override
  	public int intersectionSize(Collection<? extends T> other) {
  		if (isEmpty() || other == null || other.isEmpty())
  			return 0;
  		if (this == other)
  			return size();
  		
  		if (elements instanceof List<?> && other instanceof GenericExtendedSet<?> && ((GenericExtendedSet<?>) other).elements instanceof List<?>) {
  			int res = 0;
  			Iterator<T> thisItr = elements.iterator();
  			@SuppressWarnings("unchecked")
  			Iterator<T> otherItr = ((GenericExtendedSet<T>) other).elements.iterator();
  			while (thisItr.hasNext() && otherItr.hasNext()) {
  				T thisValue = thisItr.next();
  				T otherValue = otherItr.next();
  
  				int r = thisValue.compareTo(otherValue);
  				while (r != 0) {
  					while ((r = thisValue.compareTo(otherValue)) > 0) {
  						if (!otherItr.hasNext())
  							return res;
  						otherValue = otherItr.next();
  					}
  					if (r == 0)
  						break;
  					while ((r = otherValue.compareTo(thisValue)) > 0) {
  						if (!thisItr.hasNext())
  							return res;
  						thisValue = thisItr.next();
  					}
  				}
  				
  				res++;
  			}
  			return res;
  		}
  
  		return super.intersectionSize(other);
  	}
docs: {@inheritDoc}