Kevin McMurtrie coughed up:
I don't see why it can't implement List if given a reference point and
direction.
I've seen this discussion a few times. You can specify a reference point,
but that reference point is hard to pin down in a generic sense. What
constitutes the head, or better put, "the way in" to a circular linked list
is often goofy.
It couldn't cleanly support concurrent modification
through itself and an Iterator but that's a common limitation.
You could specify a ListIterator, which is what you get from List
implementors anyway. And a ListIterator has the add() and remove() methods
needed for such concurrent things. Once you've chosen that arbitrary head
and tail in the circle, the ListIterator could be designed in a similar way
it is for ArrayList.