Design and implementation of larger projects using object-oriented software engineering principles with emphasis on definition and use of data structures including arrays, stacks, queues, linked lists, n-trees, binary trees, hash tables, dictionaries, sets and graphs using JAVA. Standard methods are used for sorting, searching. analyzing the relative efficiency of algorithms (Big-O notation) and recursion. This course conforms to the ACM CS2 standards.