Topics to know for the final exam: Arrays - How to initialize, use, allocate, and extend. How they are stored in memory. Abstract Data Types - Definition of ADT, relationship to concrete instantiations Data Structures - Bags, Sets, Lists, Linked Lists, Trees, Binary Search Trees, Stacks, Queues, Heaps - Know operations on each, advantages/disadvantages of various implementations, places it would be good or bad to use each Java Foundation Classes and Swing - Know basic graphics concepts, how to use listeners, layout managers, nested containers Design Patterns - Iterator, Decorator, Strategy, Composite, Factory, Observer, Visitor, etc. - be able to explain, give examples, and discuss suitability in a particular situation. Memory Organization - understand scope and lifetime of a variable - understand the runtime stack and the heap Trees - Know the four tree traversal mechanisms. - Know how to produce a tree iterator. Recursion - know what is required for a recursive solution - be able to give examples of a recursive method - convert from a recursive to iterative solution or vice versa Big-O Notation - understand relationship between various algorithm notations - be able to prove that an algorithm is a particular order Sorting - understand various sorts covered in class, be able to apply them to both array and linked lists where possible. Know their run-time in O notation, both best and worst case. Be able to discuss advantages/disadvantages of various searches in a particular circumstance. Searching - know how to do a binary search of an array Threading - Know what a thread is, how to start and stop a thread, what issues multithreading might raise in a program. Networking - Know what is required for a client/server architecture - Be able to define : host, port, IP address, socket - Know how to use an object stream - Know how to accept multiple client connections to a server, either sequential or simultaneous