class Iterators {

    public static int failFast2() {
        ArrayList<Integer> numbers = new ArrayList<>();
        numbers.add(10);
        numbers.add(20);
        numbers.add(30);
        numbers.add(40);

        Iterator<Integer> iterator = numbers.iterator();
        while (iterator.hasNext()) {
            if (iterator.next() == 30) {
                // will not throw Exception
                iterator.remove();
            }
        }

        System.out.println("using iterator's remove method = " + numbers);

        iterator = numbers.iterator();
        while (iterator.hasNext()) {
            if (iterator.next() == 40) {
                // will throw Exception on
                // next call of next() method
                numbers.remove(2);
            }
        }

        return numbers.size();
    }

}