Iterator producing unique random numbers in a specified range
Looks pretty reasonable. Just a few minor issues:


    public NonRepeatingRandom(int max) {



That's fine for general-purpose use, but you should consider adding a constructor which takes (int, Random) for testing purposes.




    @Override
    public boolean hasNext() {
        return ( unused.size() &gt; 0 );
    }



I generally recommend favouring isEmpty() over size() == 0. For many collections isEmpty() just calls size(), but for some it is much more efficient, so it's a good habit to always use isEmpty().




        int idx = random.nextInt(size);
        int result = unused.get(idx);
        unused.remove(idx);



This is the biggest problem, although for your typical use case it might be relatively minor because it doesn't sound like this iterator is going to be a bottleneck.

Removing a random element from a list takes \$O(n)\$ time. But since you don't care about the order of the elements in the list, you could copy the last element to position idx and then delete the last element in \$O(1)\$ time.