private void percolateDown( int hole )
 {
     int child;
     T tmp = array[ hole ];

     for( ; hole * 2 <= currentSize; hole = child )
     {
         child = hole * 2;
         if( child != currentSize &&
                 array[ child + 1 ].compareTo( array[ child ] ) < 0 )
             child++;
         if( array[ child ].compareTo( tmp ) < 0 )
             array[ hole ] = array[ child ];
         else
             break;
     }
     array[ hole ] = tmp;
 }