You’re in the right place if you want to improve your Java programming skills and learn lots about the various ways to organize data efficiently for your applications. You’ll also learn about analysis of algorithms, formal specifications, automated unit testing, performance analysis, and a few more things.
Catalog Description: This course covers the analysis, design, and implementation of data structures including arrays, stacks, queues, linked lists, binary trees, heaps, balanced trees, and graphs. Other topics include sorting, hashing, Java generics, unit testing, and benchmarking. Course work involves both written homework and Java programming assignments.
Prerequisite(s): 601.107: Introductory Programming in Java or 601.220: Intermediate Programming.
Policies: Please read the general course policies and take them to heart. Additional policies specific to this course may be posted at a later date.
There is no required text book for this course, but it’s highly recommended that you obtain reference material to supplement lecture. Here are some suggestions.
checkstylethat you may run into
Please check the individual assignments for due dates and the structure your solutions should have. See the course policies for detailed submission instructions.
If you have an opinion on these assignments, be it good or bad, please let us know about it. We’re always trying to make these things more enjoyable (if that’s an applicable term? :-).
This is not a schedule. It’s a “log” of what we did, roughly, in each lecture. Don’t expect it to turn into a schedule, it won’t. Also there will eventually be gaps, sorry.
-Xlint:allcompiler option; using
checkstyleto enforce consistent programming style; putting together (and double-checking!)
.tar.gzarchives for submissions.
Counterinterface; Java classes as implementations; the
SimpleCounterimplementation; testing the
assertfor automated, self-contained testing; a second
WeirdCounterimplementation plus test cases.
Integerspecification; developing three variants of the
Counterspecification; design tradeoff: how specific should a specification be?
Variable; ADT notation for type parameters and constraints; the
Anyspecification, equals operation; ADT notation for functions with multiple parameters; see Piazza for writeups of all the specifications; introduction to generics in Java; hacking a
Variableinterface and a
SimpleVariableimplementation plus test cases.