+-------------------------+ | Traversal<T> | +-------------------------+ | boolean isEmpty() | | T getFirst() | | Traversal<T> getRest() | +-------------------------+ / \ / \ --- --- | | +------------+ +------------------+ | IList<T> |<-+ | +------------+ | +---------------------------------------------------+ / \ | | ArrLT<T> | --- +-------------+ +---------------------------------------------------+ | | | ArrayList<T> arrlist | ------------------- | | int first | | | | +---------------------------------------------------+ +-----------+ +----------------+ | | public ArrLT<T>(ArrayList<T> arrlist) | | MTList<T> | | ConsList<T> | | | private ArrLT<T>(ArrayList<T> arrlist, int first) | +-----------+ +----------------+ | +---------------------------------------------------+ | T first | | | IList<T> rest |-+ +----------------+ +----------------------------------------------------+ | Algorithms | +-----------------------------+ +----------------------------------------------------+ | ISelect<T> | | boolean contains(Traversal<T> tr, ISelect<T> pick) | +-----------------------------+ | int countSuch(Traversal<T> tr, ISelect<T> pick) | | boolean select(T t) | +----------------------------------------------------+ +-----------------------------+ / \ / \ --- --- | | +---------------------------+ +---------------------------+ | <Balloon> | | <Balloon> | | RedBalloon | | SmallBalloon | +---------------------------+ +---------------------------+ | boolean select(Balloon b) | | boolean select(Balloon b) | +---------------------------+ +---------------------------+ +---------- | Examples +-------------- | Traversal<Balloon> blist: ConsList<Balloon> | ... | ISelect<Balloon> redBalloon: RedBalloon ... | Algorithms algo: Algorithms |...................... | algo.contains(blist, redBalloon) -> boolean | ...