IntroCS
Introduction to Programming in Java by Robert Sedgewick and Kevin Wayne