Algorithms with ArrayLists