/** If you are looking for extra practice at implementing data structures, here's one additional exercise: Create an ArrayList class with an add(o) method (it doesn't have to grow the array -- we'll ignore that detail this time and just assume _underlyingStorage is always big enough). However, it should have an additional method: ArrayList intersect (ArrayList other) This method examines the contents of the "other" ArrayList, finds the elements that are contained both in "this" ArrayList *and* in "other", and then instantiates and returns a *third* ArrayList containing those elements. You may implement any other "helper" methods that you wish; you are only required to implement add(o) and intersect(other) methods. */ class ArrayList { T[] _underlyingStorage; ... void add (T o) { ... } ArrayList intersect (ArrayList other) { ... } }