private int resync(final int index) {
      if (xdata != getDataModCount()) {
        // The underlying list was modified somehow...
        // we need to invalidate our research...
        xdata = getDataModCount();
        backingsize = 0;
        if (size >= backingpos.length) {
          backingpos = new int[size + 1];
        }
      }

      if (index >= 0 && index < backingsize) {
        // we have already indexed far enough...
        // return the backing index.
        return backingpos[index];
      }

      // the index in the backing list of the next value to check.
      int bpi = 0;
      if (backingsize > 0) {
        bpi = backingpos[backingsize - 1] + 1;
      }

      while (bpi < size) {
        final F gotit = filter.filter(elementData[bpi]);
        if (gotit != null) {
          backingpos[backingsize] = bpi;
          if (backingsize++ == index) {
            return bpi;
          }
        }
        bpi++;
      }
      return size;
    }
private int resync(final int index)