/**
  * Updates the cached values for the minimum and maximum data values on the basis that the
  * specified item has just been removed.
  *
  * @param item the item added (<code>null</code> not permitted).
  * @since 1.0.13
  */
 private void updateBoundsForRemovedItem(XYDataItem item) {
   boolean itemContributesToXBounds = false;
   boolean itemContributesToYBounds = false;
   double x = item.getXValue();
   if (!Double.isNaN(x)) {
     if (x <= this.minX || x >= this.maxX) {
       itemContributesToXBounds = true;
     }
   }
   if (item.getY() != null) {
     double y = item.getYValue();
     if (!Double.isNaN(y)) {
       if (y <= this.minY || y >= this.maxY) {
         itemContributesToYBounds = true;
       }
     }
   }
   if (itemContributesToYBounds) {
     findBoundsByIteration();
   } else if (itemContributesToXBounds) {
     if (getAutoSort()) {
       this.minX = getX(0).doubleValue();
       this.maxX = getX(getItemCount() - 1).doubleValue();
     } else {
       findBoundsByIteration();
     }
   }
 }
 /**
  * Updates the cached values for the minimum and maximum data values.
  *
  * @param item the item added (<code>null</code> not permitted).
  * @since 1.0.13
  */
 private void updateBoundsForAddedItem(XYDataItem item) {
   double x = item.getXValue();
   this.minX = minIgnoreNaN(this.minX, x);
   this.maxX = maxIgnoreNaN(this.maxX, x);
   if (item.getY() != null) {
     double y = item.getYValue();
     this.minY = minIgnoreNaN(this.minY, y);
     this.maxY = maxIgnoreNaN(this.maxY, y);
   }
 }