code: @Pure
  	public static <E> boolean contains(List<E> list, Comparator<? super E> comparator, E data) {
  		assert list != null;
  		assert comparator != null;
  		assert data != null;
  		int first = 0;
  		int last = list.size() - 1;
  		while (last >= first) {
  			final int center = (first + last) / 2;
  			final E dt = list.get(center);
  			final int cmpR = comparator.compare(data, dt);
  			if (cmpR == 0) {
  				return true;
  			} else if (cmpR < 0) {
  				last = center - 1;
  			} else {
  				first = center + 1;
  			}
  		}
  		return false;
  	}
docs: Replies if the given element is inside the list, using a dichotomic algorithm.
  
  <p>This function ensure that the comparator is invoked as: <code>comparator(data, dataAlreadyInList)</code>.
  
  @param <E> is the type of the elements in the list.
  @param list is the list to explore.
  @param comparator is the comparator of elements.
  @param data is the data to search for.
  @return <code>true</code> if the data is inside the list, otherwise <code>false</code>