docs: @Override
      public boolean remove(Object o) {
          final ReentrantLock lock = this.lock;
          lock.lock();
          try {
              Object[] elements = getArray();
              int len = elements.length;
              if (len != 0) {
                  // Copy while searching for element to remove
                  // This wins in the normal case of element being present
                  int newlen = len - 1;
                  Object[] newElements = new Object[newlen];
  
                  for (int i = 0; i < newlen; ++i) {
                      if (eq(o, elements[i])) {
                          // found one;  copy remaining and exit
                          for (int k = i + 1; k < len; ++k)
                              newElements[k - 1] = elements[k];
                          setArray(newElements);
                          return true;
                      } else
                          newElements[i] = elements[i];
                  }
  
                  // special handling for last cell
                  if (eq(o, elements[newlen])) {
                      setArray(newElements);
                      return true;
                  }
              }
              return false;
          } finally {
              lock.unlock();
          }
      }