Don't use iterator.  Iterate through the collection backwards like this:
import java.util.ArrayList;
public class RemoveFromCollectionExample {
    //
    // instance variables
    //
    private ArrayList<Shark> sharks;
    //
    // main
    //
    public static void main(String[] args) {
        RemoveFromCollectionExample example = new RemoveFromCollectionExample();
        example.sharks = new ArrayList<RemoveFromCollectionExample.Shark>();
        example.addShark(false, false, 0, 0);
        example.addShark(false, false, 0, 0);
        example.addShark(false, false, 0, 0);
        example.addShark(false, false, 0, 0);
        example.addShark(false, false, 0, 0);
        example.addShark(false, false, 0, 0);
        example.addShark(false, true, 0, 0);
        example.addShark(true, false, 0, 0);
        example.addShark(true, false, 0, 0);
        example.addShark(true, false, 0, 0);
        System.out.println("START WITH: " + example.sharks.size());
        example.updateSharks();
        System.out.println("Added 1, Removed 3");
        System.out.println("ENDED WITH: " + example.sharks.size());
    }
    //
    // update sharks
    //
    private void updateSharks() {
        for (int i = this.sharks.size() - 1; i > 0; i--) {
            Shark sharky = this.sharks.get(i);
            if (sharky.hasStarved()) {
                this.sharks.remove(i);
                System.out.println("REMOVED");
            } else if (sharky.canBreed()) {
                addNewShark(sharky.getX(), sharky.getY());
                System.out.println("ADDED");
            }
            moveShark(sharky);
        }
    }
    //
    // add new shark method
    //
    private void addNewShark(int x, int y) {
        this.sharks.add(new Shark(false, false, x, y));
    }
    private void addShark(boolean hasStarved, boolean canBreed, int x, int y) {
        this.sharks.add(new Shark(hasStarved, canBreed, x, y));
    }
    //
    // move method
    //
    private void moveShark(Shark sharky) {
    }
    //
    // Shark class
    //
    private class Shark {
        private boolean hasStarved;
        private boolean canBreed;
        private int x;
        private int y;
        public boolean hasStarved() {
            return hasStarved;
        }
        public void setHasStarved(boolean hasStarved) {
            this.hasStarved = hasStarved;
        }
        public boolean canBreed() {
            return canBreed;
        }
        public void setCanBreed(boolean canBreed) {
            this.canBreed = canBreed;
        }
        public int getX() {
            return x;
        }
        public void setX(int x) {
            this.x = x;
        }
        public int getY() {
            return y;
        }
        public void setY(int y) {
            this.y = y;
        }
        public Shark(boolean hasStarved, boolean canBreed, int x, int y) {
            super();
            this.hasStarved = hasStarved;
            this.canBreed = canBreed;
            this.x = x;
            this.y = y;
        }
        public void moveShark() {
        }
    }
}