Note: If you had trouble with questions 85bb or a6e7 you could uses the sample solutions for those questions as a guide when completing this question.
In questions 85bb and a6e7 you were asked to add the
StringStackIterator
and IntSetIterator
interfaces to your
collection of string stack and int set classes, respectively. Your task was then to
add an iterator
method to the StringStack
and IntSet
interfaces, and provide
implementations of StringStackIterator
for each type
of string stack (resulting in StringStackArrayIterator
and StringStackListIterator
)
and IntSetIterator
for each type of int set (resulting in MemoryEfficientIntSetIterator
and SpeedEfficientIntSetIterator
)
respectively.
Your task is now to do something analogous for the GenericStack
and GenericSet
interfaces
and implementing classes that you have defined in question b401. This should be
a straightforward case of cutting and pasting the iterators from question 85bb/a6e7 (either from your solution or the sample solution)
and changing the definitions to be generic, rather than string/integer specific.
This should lead to the generic interfaces GenericStackIterator
and GenericSetIterator
, together
with four implementing classes: one for each of the kinds of stack and set.
You should find that the GenericStackIterator
and GenericSetIterator
interfaces are identical.
Improve your design to eliminate this duplication by replacing these interfaces with a single GenericIterator
interface.
Extension: Interfaces GenericStack
and GenericSet
have the common method iterator()
.
Abstract this duplication by creating a unifying interface, GenericCollection
, that offers the iterator()
method, and make GenericStack
and GenericSet
both extend your new interface.