code: @Override
      public boolean removeAll(Collection<?> c) {
          final ReentrantLock lock = this.lock;
          lock.lock();
          try {
              Object[] elements = getArray();
              int len = elements.length;
              if (len != 0) {
                  // temp array holds those elements we know we want to keep
                  int newlen = 0;
                  Object[] temp = new Object[len];
                  for (int i = 0; i < len; ++i) {
                      Object element = elements[i];
                      if (!c.contains(element))
                          temp[newlen++] = element;
                  }
                  if (newlen != len) {
                      setArray(Arrays.copyOf(temp, newlen));
                      return true;
                  }
              }
              return false;
          } finally {
              lock.unlock();
          }
      }
docs: Removes from this list all of its elements that are contained in
  the specified collection. This is a particularly expensive operation
  in this class because of the need for an internal temporary array.
  
  @param c collection containing elements to be removed from this list
  @return <tt>true</tt> if this list changed as a result of the call
  @throws ClassCastException if the class of an element of this list
  is incompatible with the specified collection
  (<a href="../Collection.html#optional-restrictions">optional</a>)
  @throws NullPointerException if this list contains a null element and the
  specified collection does not permit null elements
  (<a href="../Collection.html#optional-restrictions">optional</a>),
  or if the specified collection is null
  @see #remove(Object)