Introduction to Java Programming and Data Structures, Comprehensive Version, 12th Edition by Y. Daniel Liang-Pearson