void moveLastEntry(int dstIndex) {
    int srcIndex = size() - 1;
    if (dstIndex < srcIndex) {
      // move last entry to deleted spot
      elements[dstIndex] = elements[srcIndex];
      elements[srcIndex] = null;

      // move the last entry to the removed spot, just like we moved the element
      long lastEntry = entries[srcIndex];
      entries[dstIndex] = lastEntry;
      entries[srcIndex] = UNSET;

      // also need to update whoever's "next" pointer was pointing to the last entry place
      // reusing "tableIndex" and "next"; these variables were no longer needed
      int tableIndex = getHash(lastEntry) & hashTableMask();
      int lastNext = table[tableIndex];
      if (lastNext == srcIndex) {
        // we need to update the root pointer
        table[tableIndex] = dstIndex;
      } else {
        // we need to update a pointer in an entry
        int previous;
        long entry;
        do {
          previous = lastNext;
          lastNext = getNext(entry = entries[lastNext]);
        } while (lastNext != srcIndex);
        // here, entries[previous] points to the old entry location; update it
        entries[previous] = swapNext(entry, dstIndex);
      }
    } else {
      elements[dstIndex] = null;
      entries[dstIndex] = UNSET;
    }
  }
void moveLastEntry(int dstIndex) {
    int srcIndex = size() - 1;
    if (dstIndex < srcIndex) {
      
      elements[dstIndex] = elements[srcIndex];
      elements[srcIndex] = null;

      
      long lastEntry = entries[srcIndex];
      entries[dstIndex] = lastEntry;
      entries[srcIndex] = UNSET;

      
      
      int tableIndex = getHash(lastEntry) & hashTableMask();
      int lastNext = table[tableIndex];
      if (lastNext == srcIndex) {
        
        table[tableIndex] = dstIndex;
      } else {
        
        int previous;
        long entry;
        do {
          previous = lastNext;
          lastNext = getNext(entry = entries[lastNext]);
        } while (lastNext != srcIndex);
        
        entries[previous] = swapNext(entry, dstIndex);
      }
    } else {
      elements[dstIndex] = null;
      entries[dstIndex] = UNSET;
    }
  }
void moveLastEntry ( int dstIndex ) { int srcIndex = size ( ) - 1 ; if ( dstIndex < srcIndex ) { // move last entry to deleted spot elements [ dstIndex ] = elements [ srcIndex ] ; elements [ srcIndex ] = null ; // move the last entry to the removed spot, just like we moved the element long lastEntry = entries [ srcIndex ] ; entries [ dstIndex ] = lastEntry ; entries [ srcIndex ] = UNSET ; // also need to update whoever's "next" pointer was pointing to the last entry place // reusing "tableIndex" and "next"; these variables were no longer needed int tableIndex = getHash ( lastEntry ) & hashTableMask ( ) ; int lastNext = table [ tableIndex ] ; if ( lastNext == srcIndex ) { // we need to update the root pointer table [ tableIndex ] = dstIndex ; } else { // we need to update a pointer in an entry int previous ; long entry ; do { previous = lastNext ; lastNext = getNext ( entry = entries [ lastNext ] ) ; } while ( lastNext != srcIndex ) ; // here, entries[previous] points to the old entry location; update it entries [ previous ] = swapNext ( entry , dstIndex ) ; } } else { elements [ dstIndex ] = null ; entries [ dstIndex ] = UNSET ; } }
Moves the last entry in the entry array into {@code dstIndex}, and nulls out its old position.
Moves the last entry in the entry array into {