Description
Introduction to Java Programming and Data Structures 12th Edition by Y. Daniel Liang, ISBN-13: 978-0136520238
[PDF eBook eTextbook]
- Publisher: Pearson; 12th edition (December 4, 2019)
- Language: English
- ISBN-10: 0136520235
- ISBN-13: 978-0136520238
For courses in Java Programming.
A fundamentals-first introduction to basic programming concepts and techniques
Introduction to Java Programming and Data Structuresseamlessly integrates programming, data structures, and algorithms into one text. With a fundamentals-first approach, the text builds a strong foundation of basic programming concepts and techniques before teaching students object-oriented programming and advanced Java programming. Liang explains programming in a problem-driven way that focuses on problem solving rather than syntax, illustrating basic concepts by example and providing a large number of exercises with various levels of difficulty for students to practice. The 12th Edition is completely revised in every detail to enhance clarity, presentation, content, examples, and exercises.
Table of Contents:
Introduction to Java™ Programming and Data Structures
Preface
ACM/IEEE Curricular 2013 and ABET Course Assessment
What’s New in This Edition?
Pedagogical Features
Flexible Chapter Orderings
Organization of the Book
Java Development Tools
Student Resource Website
Supplements
Instructor Resource Website
Online Practice and Assessment with MyProgrammingLab
Video Notes
Algorithm Animations
Brief Contents
Contents
VideoNotes
Animations
Chapter 1 Introduction to Computers, Programs, and Java™
Objectives
1.1 Introduction
Key Point
1.2 What Is a Computer?
Key Point
1.2.1 Central Processing Unit
1.2.2 Bits and Bytes
1.2.3 Memory
1.2.4 Storage Devices
Disks
CDs and DVDs
USB Flash Drives
Cloud Storage
1.2.5 Input and Output Devices
The Keyboard
The Mouse
The Monitor
Touchscreens
1.2.6 Communication Devices
1.3 Programming Languages
Key Point
1.3.1 Machine Language
1.3.2 Assembly Language
1.3.3 High-Level Language
1.4 Operating Systems
Key Point
1.4.1 Controlling and Monitoring System Activities
1.4.2 Allocating and Assigning System Resources
1.4.3 Scheduling Operations
1.5 Java, the World Wide Web, and Beyond
Key Point
1.6 The Java Language Specification, API, JDK, JRE, and IDE
Key Point
1.7 A Simple Java Program
Key Point
Listing 1.1 Welcome.java
Listing 1.2 WelcomeWithThreeMessages.java
Listing 1.3 ComputeExpression.java
1.8 Creating, Compiling, and Executing a Java Program
Key Point
1.9 Programming Style and Documentation
Key Point
1.9.1 Appropriate Comments and Comment Styles
1.9.2 Proper Indentation and Spacing
1.9.3 Block Styles
1.10 Programming Errors
Key Point
1.10.1 Syntax Errors
Listing 1.4 ShowSyntaxErrors.java
1.10.2 Runtime Errors
Listing 1.5 ShowRuntimeErrors.java
1.10.3 Logic Errors
Listing 1.6 ShowLogicErrors.java
1.10.4 Common Errors
Common Error 1: Missing Braces
Common Error 2: Missing Semicolons
Common Error 3: Missing Quotation Marks
Common Error 4: Misspelling Names
1.11 Developing Java Programs Using NetBeans
Key Point
1.11.1 Creating a Java Project
1.11.2 Creating a Java Class
1.11.3 Compiling and Running a Class
1.12 Developing Java Programs Using Eclipse
Key Point
1.12.1 Creating a Java Project
1.12.2 Creating a Java Class
1.12.3 Compiling and Running a Class
Key Terms
Chapter Summary
Quiz
Programming Exercises
Chapter 2 Elementary Programming
Objectives
2.1 Introduction
Key Point
2.2 Writing a Simple Program
Key Point
Listing 2.1 ComputeArea.java
2.3 Reading Input from the Console
Key Point
Listing 2.2 ComputeAreaWithConsoleInput.java
Listing 2.3 ComputeAverage.java
2.4 Identifiers
Key Point
2.5 Variables
Key Point
2.6 Assignment Statements and Assignment Expressions
Key Point
2.7 Named Constants
Key Point
Listing 2.4 ComputeAreaWithConstant.java
2.8 Naming Conventions
Key Point
2.9 Numeric Data Types and Operations
Key Point
2.9.1 Reading Numbers from the Keyboard
2.9.2 Numeric Operators
Listing 2.5 DisplayTime.java
2.9.3 Exponent Operations
2.10 Numeric Literals
Key Point
2.10.1 Integer Literals
2.10.2 Floating-Point Literals
2.10.3 Scientific Notation
2.11 JShell
Key Point
2.12 Evaluating Expressions and Operator Precedence
Key Point
Listing 2.6 FahrenheitToCelsius.java
2.13 Case Study: Displaying the Current Time
Key Point
Listing 2.7 ShowCurrentTime.java
2.14 Augmented Assignment Operators
Key Point
2.15 Increment and Decrement Operators
Key Point
2.16 Numeric Type Conversions
Key Point
Listing 2.8 SalesTax.java
2.17 Software Development Process
Key Point
Listing 2.9 ComputeLoan.java
2.18 Case Study: Counting Monetary Units
Key Point
Listing 2.10 ComputeChange.java
2.19 Common Errors and Pitfalls
Key Point
Common Error 1: Undeclared/Uninitialized Variables and Unused Variables
Common Error 2: Integer Overflow
Common Error 3: Round-off Errors
Common Error 4: Unintended Integer Division
Common Pitfall 1: Redundant Input Objects
Key Terms
Chapter Summary
Quiz
Programming Exercises
Sections 2.2–2.13
Sections 2.13–2.18
Chapter 3 Selections
Objectives
3.1 Introduction
Key Point
3.2 boolean Data Type, Values, and Expressions
Key Point
Listing 3.1 AdditionQuiz.java
3.3 if Statements
Key Point
Listing 3.2 SimpleIfDemo.java
3.4 Two-Way if-else Statements
Key Point
3.5 Nested if and Multi-Way if-else Statements
Key Point
3.6 Common Errors and Pitfalls
Key Point
3.7 Generating Random Numbers
Key Point
Listing 3.3 SubtractionQuiz.java
3.8 Case Study: Computing Body Mass Index
Key Point
Listing 3.4 ComputeAndInterpretBMI.java
3.9 Case Study: Computing Taxes
Key Point
Listing 3.5 ComputeTax.java
3.10 Logical Operators
Key Point
Listing 3.6 TestBooleanOperators.java
3.11 Case Study: Determining Leap Year
Key Point
Listing 3.7 LeapYear.java
3.12 Case Study: Lottery
Key Point
Listing 3.8 Lottery.java
3.13 switch Statements
Key Point
Listing 3.9 ChineseZodiac.java
3.14 Conditional Operators
Key Point
3.15 Operator Precedence and Associativity
Key Point
3.16 Debugging
Key Point
Key Terms
Chapter Summary
Quiz
Programming Exercises
Section 3.2
Sections 3.3–3.7
Sections 3.8–3.16
Comprehensive
Chapter 4 Mathematical Functions, Characters, and Strings
Objectives
4.1 Introduction
Key Point
4.2 Common Mathematical Functions
Key Point
4.2.1 Trigonometric Methods
4.2.2 Exponent Methods
4.2.3 The Rounding Methods
4.2.4 The min, max, and abs Methods
4.2.5 The random Method
4.2.6 Case Study: Computing Angles of a Triangle
Listing 4.1 ComputeAngles.java
4.3 Character Data Type and Operations
Key Point
4.3.1 Unicode and ASCII Code
4.3.2 Escape Sequences for Special Characters
4.3.3 Casting between char and Numeric Types
4.3.4 Comparing and Testing Characters
4.4 The String Type
Key Point
4.4.1 Getting String Length
4.4.2 Getting Characters from a String
4.4.3 Concatenating Strings
4.4.4 Converting Strings
4.4.5 Reading a String from the Console
4.4.6 Reading a Character from the Console
4.4.7 Comparing Strings
Listing 4.2 OrderTwoCities.java
4.4.8 Obtaining Substrings
4.4.9 Finding a Character or a Substring in a String
4.4.10 Conversion between Strings and Numbers
4.5 Case Studies
Key Point
4.5.1 Case Study: Guessing Birthdays
Listing 4.3 GuessBirthday.java
4.5.2 Case Study: Converting a Hexadecimal Digit to a Decimal Value
Listing 4.4 HexDigit2Dec.java
4.5.3 Case Study: Revising the Lottery Program Using Strings
Listing 4.5 LotteryUsingStrings.java
4.6 Formatting Console Output
Key Point
Listing 4.6 FormatDemo.java
Key Terms
Chapter Summary
Quiz
Programming Exercises
Section 4.2
Sections 4.3–4.6
Chapter 5 Loops
Objectives
5.1 Introduction
Key Point
5.2 The while Loop
Key Point
Listing 5.1 RepeatAdditionQuiz.java
5.3 Case Study: Guessing Numbers
Key Point
Listing 5.2 GuessNumberOneTime.java
Listing 5.3 GuessNumber.java
5.4 Loop Design Strategies
Key Point
Listing 5.4 SubtractionQuizLoop.java
5.5 Controlling a Loop with User Confirmation or a Sentinel Value
Key Point
Listing 5.5 SentinelValue.java
5.6 The do-while Loop
Key Point
Listing 5.6 TestDoWhile.java
5.7 The for Loop
Key Point
5.8 Which Loop to Use?
Key Point
5.9 Nested Loops
Key Point
Listing 5.7 MultiplicationTable.java
5.10 Minimizing Numeric Errors
Key Point
Listing 5.8 TestSum.java
5.11 Case Studies
Key Point
5.11.1 Case Study: Finding the Greatest Common Divisor
Listing 5.9 GreatestCommonDivisor.java
5.11.2 Case Study: Predicting the Future Tuition
Listing 5.10 FutureTuition.java
5.11.3 Case Study: Converting Decimals to Hexadecimals
Listing 5.11 Dec2Hex.java
5.12 Keywords break and continue
Key Point
Listing 5.12 TestBreak.java
Listing 5.13 TestContinue.java
5.13 Case Study: Checking Palindromes
Key Point
Listing 5.14 Palindrome.java
5.14 Case Study: Displaying Prime Numbers
Key Point
Listing 5.15 PrimeNumber.java
Key Terms
Chapter Summary
Quiz
Programming Exercises
Sections 5.2–5.7
Sections 5.8–5.10
Comprehensive
Chapter 6 Methods
Objectives
6.1 Introduction
Key Point
Listing MethodDemo.java
6.2 Defining a Method
Key Point
6.3 Calling a Method
Key Point
Listing 6.1 TestMax.java
6.4 void vs. Value-Returning Methods
Key Point
Listing 6.2 TestVoidMethod.java
Listing 6.3 TestReturnGradeMethod.java
6.5 Passing Arguments by Values
Key Point
Listing 6.4 Increment.java
Listing 6.5 TestPassByValue.java
6.6 Modularizing Code
Key Point
Listing 6.6 GreatestCommonDivisorMethod.java
Listing 6.7 PrimeNumberMethod.java
6.7 Case Study: Converting Hexadecimals to Decimals
Key Point
Listing 6.8 Hex2Dec.java
6.8 Overloading Methods
Key Point
Listing 6.9 TestMethodOverloading.java
6.9 The Scope of Variables
Key Point
6.10 Case Study: Generating Random Characters
Key Point
Listing 6.10 RandomCharacter.java
Listing 6.11 TestRandomCharacter.java
6.11 Method Abstraction and Stepwise Refinement
Key Point
6.11.1 Top-Down Design
6.11.2 Top-Down and/or Bottom-Up Implementation
6.11.3 Implementation Details
Listing 6.12 PrintCalendar.java
6.11.4 Benefits of Stepwise Refinement
Simpler Program
Reusing Methods
Easier Developing, Debugging, and Testing
Better Facilitating Teamwork
Key Terms
Chapter Summary
Quiz
Programming Exercises
Sections 6.2–6.9
Sections 6.10 and 6.11
Sections 6.10–6.12
Comprehensive
Chapter 7 Single-Dimensional Arrays
Objectives
7.1 Introduction
Key Point
7.2 Array Basics
Key Point
7.2.1 Declaring Array Variables
7.2.2 Creating Arrays
7.2.3 Array Size and Default Values
7.2.4 Accessing Array Elements
7.2.5 Array Initializers
7.2.6 Processing Arrays
7.2.7 Foreach Loops
7.3 Case Study: Analyzing Numbers
Key Point
Listing 7.1 AnalyzeNumbers.java
7.4 Case Study: Deck of Cards
Key Point
Listing 7.2 DeckOfCards.java
7.5 Copying Arrays
Key Point
7.6 Passing Arrays to Methods
Key Point
Listing 7.3 TestPassArray.java
7.7 Returning an Array from a Method
Key Point
7.8 Case Study: Counting the Occurrences of Each Letter
Key Point
Listing 7.4 CountLettersInArray.java
7.9 Variable-Length Argument Lists
Key Point
Listing 7.5 VarArgsDemo.java
7.10 Searching Arrays
Key Point
7.10.1 The Linear Search Approach
Listing 7.6 LinearSearch.java
7.10.2 The Binary Search Approach
Listing 7.7 BinarySearch.java
7.11 Sorting Arrays
Key Point
Listing 7.8 SelectionSort.java
7.12 The Arrays Class
Key Point
7.13 Command-Line Arguments
Key Point
7.13.1 Passing Strings to the main Method
7.13.2 Case Study: Calculator
Listing 7.9 Calculator.java
Key Terms
Chapter Summary
Quiz
Programming Exercises
Sections 7.2–7.5
Sections 7.6–7.8
Section 7.9
Sections 7.10–7.12
Section 7.13
Comprehensive
Chapter 8 Multidimensional Arrays
Objectives
8.1 Introduction
Key Point
8.2 Two-Dimensional Array Basics
Key Point
8.2.1 Declaring Variables of Two-Dimensional Arrays and Creating Two-Dimensional Arrays
8.2.2 Obtaining the Lengths of Two-Dimensional Arrays
8.2.3 Ragged Arrays
8.3 Processing Two-Dimensional Arrays
Key Point
8.4 Passing Two-Dimensional Arrays to Methods
Key Point
Listing 8.1 PassTwoDimensionalArray.java
8.5 Case Study: Grading a Multiple-Choice Test
Key Point
Listing 8.2 GradeExam.java
8.6 Case Study: Finding the Closest Pair
Key Point
Listing 8.3 FindNearestPoints.java
8.7 Case Study: Sudoku
Key Point
Listing 8.4 CheckSudokuSolution.java
8.8 Multidimensional Arrays
Key Point
8.8.1 Case Study: Daily Temperature and Humidity
Listing 8.5 Weather.java
8.8.2 Case Study: Guessing Birthdays
Listing 8.6 GuessBirthdayUsingArray.java
Key Terms
Chapter Summary
Quiz
Programming Exercises
Chapter 9 Objects and Classes
Objectives
9.1 Introduction
Key Point
9.2 Defining Classes for Objects
Key Point
9.3 Example: Defining Classes and Creating Objects
Key Point
Listing 9.1 TestCircle.java
Listing 9.2 Circle.java (AlternativeCircle.java)
Listing 9.3 TV.java
Listing 9.4 TestTV.java
9.4 Constructing Objects Using Constructors
Key Point
9.5 Accessing Objects via Reference Variables
Key Point
9.5.1 Accessing an Object’s Data and Methods
9.5.2 Reference Data Fields and the null Value
9.5.3 Differences between Variables of Primitive Types and Reference Types
9.6 Using Classes from the Java Library
Key Point
9.6.1 The Date Class
9.6.2 The Random Class
9.6.3 The Point2D Class
Listing 9.5 TestPoint2D.java
9.7 Static Variables, Constants, and Methods
Key Point
Listing 9.6 Circle.java (for CircleWithStaticMembers)
Listing 9.7 TestCircleWithStaticMembers.java
9.8 Visibility Modifiers
Key Point
9.9 Data Field Encapsulation
Key Point
Listing 9.8 Circle.java(for CircleWithPrivateDataFields)
Listing 9.9 TestCircleWithPrivateDataFields.java
9.10 Passing Objects to Methods
Key Point
Listing 9.10 TestPassObject.java
9.11 Array of Objects
Key Point
Listing 9.11 TotalArea.java
9.12 Immutable Objects and Classes
Key Point
9.13 The Scope of Variables
Key Point
9.14 The this Reference
Key Point
9.14.1 Using this to Reference Data Fields
9.14.2 Using this to Invoke a Constructor
Key Terms
Chapter Summary
Quiz
Programming Exercises
Sections 9.2–9.5
Section 9.6
Sections 9.7–9.9
Chapter 10 Object-Oriented Thinking
Objectives
10.1 Introduction
Key Point
10.2 Class Abstraction and Encapsulation
Key Point
Listing 10.1 TestLoanClass.java
Listing 10.2 Loan.java
10.3 Thinking in Objects
Key Point
Listing 10.3 UseBMIClass.java
Listing 10.4 BMI.java
10.4 Class Relationships
Key Point
10.4.1 Association
10.4.2 Aggregation and Composition
10.5 Case Study: Designing the Course Class
Key Point
Listing 10.5 TestCourse.java
Listing 10.6 Course.java
10.6 Case Study: Designing a Class for Stacks
Key Point
Listing 10.7 TestStackOfIntegers.java
10.7 Processing Primitive Data Type Values as Objects
Key Point
10.8 Automatic Conversion between Primitive Types and Wrapper Class Types
Key Point
10.9 The BigInteger and BigDecimal Classes
Key Point
10.10 The String Class
Key Point
10.10.1 Immutable Strings and Interned Strings
10.10.2 Replacing and Splitting Strings
10.10.3 Matching, Replacing, and Splitting by Patterns
10.10.4 Conversion between Strings and Arrays
10.10.5 Converting Characters and Numeric Values to Strings
10.10.6 Formatting Strings
10.11 The StringBuilder and StringBuffer Classes
Key Point
10.11.1 Modifying Strings in the StringBuilder
10.11.2 The toString, capacity, length, setLength, and charAt Methods
10.11.3 Case Study: Ignoring Nonalphanumeric Characters When Checking Palindromes
Listing 10.10 PalindromeIgnoreNonAlphanumeric.java
Key Terms
Chapter Summary
Quiz
Programming Exercises
Sections 10.2 and 10.3
Sections 10.4–10.8
Section 10.9
Sections 10.10 and 10.11
Chapter 11 Inheritance and Polymorphism
Objectives
11.1 Introduction
Key Point
11.2 Superclasses and Subclasses
Key Point
Listing 11.1 GeometricObject.java
Listing 11.2 Circle.java
Listing 11.3 Rectangle.java
Listing 11.4 TestCircleRectangle.java
11.3 Using the super Keyword
Key Point
11.3.1 Calling Superclass Constructors
11.3.2 Constructor Chaining
11.3.3 Calling Superclass Methods
11.4 Overriding Methods
Key Point
11.5 Overriding vs. Overloading
Key Point
11.6 The Object Class and Its toString() Method
Key Point
11.7 Polymorphism
Key Point
Listing 11.5 PolymorphismDemo.java
11.8 Dynamic Binding
Key Point
Listing 11.6 DynamicBindingDemo.java
11.9 Casting Objects and the instanceof Operator
Key Point
Listing 11.7 CastingDemo.java
11.10 The Object’s equals Method
Key Point
11.11 The ArrayList Class
Key Point
Listing 11.8 TestArrayList.java
Listing 11.9 DistinctNumbers.java
11.12 Useful Methods for Lists
Key Point
11.13 Case Study: A Custom Stack Class
Key Point
Listing 11.10 MyStack.java
11.14 The Protected Data and Methods
Key Point
11.15 Preventing Extending and Overriding
Key Point
Key Terms
Chapter Summary
Quiz
Programming Exercises
Sections 11.2–11.4
Sections 11.5–11.14
Chapter 12 Exception Handling and Text I/O
Objectives
12.1 Introduction
Key Point
12.2 Exception-Handling Overview
Key Point
Listing 12.1 Quotient.java
Listing 12.2 QuotientWithIf.java
Listing 12.3 QuotientWithMethod.java
Listing 12.4 QuotientWithException.java
Listing 12.5 InputMismatchExceptionDemo.java
12.3 Exception Types
Key Point
12.4 Declaring, Throwing, and Catching Exceptions
Key Point
12.4.1 Declaring Exceptions
12.4.2 Throwing Exceptions
12.4.3 Catching Exceptions
12.4.4 Getting Information from Exceptions
Listing 12.6 TestException.java
12.4.5 Example: Declaring, Throwing, and Catching Exceptions
Listing 12.7 CircleWithException.java
Listing 12.8 TestCircleWithException.java
12.5 The finally Clause
Key Point
12.6 When to Use Exceptions
Key Point
12.7 Rethrowing Exceptions
Key Point
12.8 Chained Exceptions
Key Point
Listing 12.9 ChainedExceptionDemo.java
12.9 Defining Custom Exception Classes
Key Point
Listing 12.10 InvalidRadiusException.java
Listing 12.11 TestCircleWithCustomException.java
12.10 The File Class
Key Point
Listing 12.12 TestFileClass.java
12.11 File Input and Output
Key Point
12.11.1 Writing Data Using PrintWriter
Listing 12.13 WriteData.java
12.11.2 Closing Resources Automatically Using try-with-resources
Listing 12.14 WriteDataWithAutoClose.java
12.11.3 Reading Data Using Scanner
Listing 12.15 ReadData.java
12.11.4 How Does Scanner Work?
12.11.5 Case Study: Replacing Text
Listing 12.16 ReplaceText.java
12.12 Reading Data from the Web
Key Point
Listing 12.17 ReadFileFromURL.java
12.13 Case Study: Web Crawler
Listing 12.18 WebCrawler.java
Key Terms
Chapter Summary
Quiz
Programming Exercises
Sections 12.2–12.9
Sections 12.10–12.12
Chapter 13 Abstract Classes and Interfaces
Objectives
13.1 Introduction
Key Point
13.2 Abstract Classes
Key Point
Listing 13.1 GeometricObject.java
Listings 13.2 Circle.java
Listings 13.3 Rectangle.java
13.2.1 Why Abstract Methods?
Listing 13.4 TestGeometricObject.java
13.2.2 Interesting Points about Abstract Classes
13.3 Case Study: The Abstract Number Class
Key Point
Listing 13.5 LargestNumber.java
13.4 Case Study: Calendar and GregorianCalendar
Key Point
Listing 13.6 TestCalendar.java
13.5 Interfaces
Key Point
Listing 13.7 TestEdible.java
13.6 The Comparable Interface
Key Point
Listing 13.8 SortComparableObjects.java
Listing 13.9 ComparableRectangle.java
Listing 13.10 SortRectangles.java
13.7 The Cloneable Interface
Key Point
Listing 13.11 House.java
13.8 Interfaces vs. Abstract Classes
Key Point
13.9 Case Study: The Rational Class
Key Point
Listing 13.12 TestRationalClass.java
Listing 13.13 Rational.java
13.10 Class-Design Guidelines
Key Point
13.10.1 Cohesion
13.10.2 Consistency
13.10.3 Encapsulation
13.10.4 Clarity
13.10.5 Completeness
13.10.6 Instance vs. Static
13.10.7 Inheritance vs. Aggregation
13.10.8 Interfaces vs. Abstract Classes
Key Terms
Chapter Summary
Quiz
Programming Exercises
Sections 13.2 and 13.3
Sections 13.4–13.8v
Section 13.9
Chapter 14 JavaFX Basics
Objectives
14.1 Introduction
Key Point
14.2 JavaFX vs. Swing and AWT
Key Point
14.3 The Basic Structure of a JavaFX Program
Key Point
Listing 14.1 MyJavaFX.java
Listing 14.2 MultipleStageDemo.java
14.4 Panes, Groups, UI Controls, and Shapes
Key Point
Listing 14.3 ButtonInPane.java
Listing 14.4 ShowCircle.java
14.5 Property Binding
Key Point
Listing 14.5 ShowCircleCentered.java
Listing 14.6 BindingDemo.java
14.6 Common Properties and Methods for Nodes
Key Point
Listing 14.7 NodeStyleRotateDemo.java
14.7 The Color Class
Key Point
14.8 The Font Class
Key Point
Listing 14.8 FontDemo.java
14.9 The Image and ImageView Classes
Key Point
Listing 14.9 ShowImage.java
14.10 Layout Panes and Groups
Key Point
14.10.1 FlowPane
Listing 14.10 ShowFlowPane.java
14.10.2 GridPane
Listing 14.11 ShowGridPane.java
14.10.3 BorderPane
Listing 14.12 ShowBorderPane.java
14.10.4 HBox and VBox
Listing 14.13 ShowHBoxVBox.java
14.11 Shapes
Key Point
14.11.1 Text
Listing 14.14 ShowText.java
14.11.2 Line
Listing 14.15 ShowLine.java
14.11.3 Rectangle
Listing 14.16 ShowRectangle.java
14.11.4 Circle and Ellipse
Listing 14.17 ShowEllipse.java
14.11.5 Arc
Listing 14.18 ShowArc.java
14.11.6 Polygon and Polyline
Listing 14.19 ShowPolygon.java
14.12 Case Study: The ClockPane Class
Key Point
Listing 14.20 DisplayClock.java
Listing 14.21 ClockPane.java
Key Terms
Chapter Summary
Quiz
Programming Exercises
Sections 14.2–14.9
Sections 14.10 and 14.11
Section 14.12
Chapter 15 Event-Driven Programming and Animations
Objectives
15.1 Introduction
Key Point
Listing 15.1 HandleEvent.java
15.2 Events and Event Sources
Key Point
15.3 Registering Handlers and Handling Events
Key Point
Listing 15.2 ControlCircleWithoutEventHandling.java
Listing 15.3 ControlCircle.java
15.4 Inner Classes
Key Point
15.5 Anonymous Inner-Class Handlers
Key Point
Listing 15.4 AnonymousHandlerDemo.java
15.6 Simplifying Event Handling Using Lambda Expressions
Key Point
Listing 15.5 LambdaHandlerDemo.java
Listing 15.6 TestLambda.java
15.7 Case Study: Loan Calculator
Key Point
Listing 15.7 LoanCalculator.java
15.8 Mouse Events
Key Point
Listing 15.8 MouseEventDemo.java
15.9 Key Events
Key Point
Listing 15.9 KeyEventDemo.java
Listing 15.10 ControlCircleWithMouseAndKey.java
15.10 Listeners for Observable Objects
Key Point
Listing 15.11 ObservablePropertyDemo.java
Listing 15.12 ResizableCircleRectangle.java
15.11 Animation
Key Point
15.11.1 PathTransition
Listing 15.13 PathTransitionDemo.java
Listing 15.14 FlagRisingAnimation.java
15.11.2 FadeTransition
Listing 15.15 FadeTransitionDemo.java
15.11.3 Timeline
Listing 15.16 TimelineDemo.java
Listing 15.17 ClockAnimation.java
15.12 Case Study: Bouncing Ball
Key Point
Listing 15.18 BallPane.java
Listing 15.19 BounceBallControl.java
15.13 Case Study: US Map
Key Point
Listing 15.20 USMap.java
Key Terms
Chapter Summary
Quiz
Programming Exercises
Sections 15.2–15.7
Sections 15.8 and 15.9
Section 15.10
Section 15.11
Chapter 16 JavaFX UI Controls and Multimedia
Objectives
16.1 Introduction
Key Point
16.2 Labeled and Label
Key Point
Listing 16.1 LabelWithGraphic.java
16.3 Button
Key Point
Listing 16.2 ButtonDemo.java
16.4 CheckBox
Key Point
Listing 16.3 CheckBoxDemo.java
16.5 RadioButton
Key Point
Listing 16.4 RadioButtonDemo.java
16.6 TextField
Key Point
Listing 16.5 TextFieldDemo.java
16.7 TextArea
Key Point
Listing 16.6 DescriptionPane.java
Listing 16.7 TextAreaDemo.java
16.8 ComboBox
Key Point
Listing 16.8 ComboBoxDemo.java
16.9 ListView
Key Point
Listing 16.9 ListViewDemo.java
16.10 ScrollBar
Key Point
Listing 16.10 ScrollBarDemo.java
16.11 Slider
Key Point
Listing 16.11 SliderDemo.java
Listing 16.12 BounceBallSlider.java
16.12 Case Study: Developing a Tic-Tac-Toe Game
Key Point
Listing 16.13 TicTacToe.java
16.13 Video and Audio
Key Point
Listing 16.14 MediaDemo.java
16.14 Case Study: National Flags and Anthems
Key Point
Listing 16.15 FlagAnthem.java
Chapter Summary
Quiz
Programming Exercises
Sections 16.2–16.5
Sections 16.6–16.8
Sections 16.6–16.8
Comprehensive
Chapter 17 Binary I/O
Objectives
17.1 Introduction
Key Point
17.2 How Is Text I/O Handled in Java?
Key Point
17.3 Text I/O vs. Binary I/O
Key Point
17.4 Binary I/O Classes
Key Point
17.4.1 FileInputStream/FileOutputStream
Listing 17.1 TestFileStream.java
17.4.2 FilterInputStream/FilterOutputStream
17.4.3 DataInputStream/DataOutputStream
Characters and Strings in Binary I/O
Creating DataInputStream/DataOutputStream
Listing 17.2 TestDataStream.java
Detecting the End of a File
Listing 17.3 DetectEndOfFile.java
17.4.4 BufferedInputStream/BufferedOutputStream
17.5 Case Study: Copying Files
Key Point
Listing 17.4 Copy.java
17.6 Object I/O
Key Point
Listing 17.5 TestObjectOutputStream.java
Listing 17.6 TestObjectInputStream.java
17.6.1 The Serializable Interface
17.6.2 Serializing Arrays
Listing 17.7 TestObjectStreamForArray.java
17.7 Random-Access Files
Key Point
Listing 17.8 TestRandomAccessFile.java
Key Terms
Chapter Summary
Quiz
Programming Exercises
Section 17.3
Section 17.4
Section 17.6
Section 17.7
Comprehensive
Chapter 18 Recursion
Objectives
18.1 Introduction
Key Point
18.2 Case Study: Computing Factorials
Key Point
Listing 18.1 ComputeFactorial.java
18.3 Case Study: Computing Fibonacci Numbers
Key Point
Listing 18.2 ComputeFibonacci.java
18.4 Problem Solving Using Recursion
Key Point
Listing 18.3 RecursivePalindromeUsingSubstring.java
18.5 Recursive Helper Methods
Key Point
Listing 18.4 RecursivePalindrome.java
18.5.1 Recursive Selection Sort
Listing 18.5 RecursiveSelectionSort.java
18.5.2 Recursive Binary Search
Listing 18.6 RecursiveBinarySearch.java
18.6 Case Study: Finding the Directory Size
Key Point
Listing 18.7 DirectorySize.java
18.7 Case Study: Tower of Hanoi
Key Point
Listing 18.8 TowerOfHanoi.java
18.8 Case Study: Fractals
Key Point
Listing 18.9 SierpinskiTriangle.java
18.9 Recursion vs. Iteration
Key Point
18.10 Tail Recursion
Key Point
Listing 18.10 ComputeFactorialTailRecursion.java
Key Terms
Chapter Summary
Quiz
Programming Exercises
Sections 18.2 and 18.3
Section 18.4
Section 18.5
Sections 18.6–18.10
Chapter 19 Generics
Objectives
19.1 Introduction
Key Point
19.2 Motivations and Benefits
Key Point
19.3 Defining Generic Classes and Interfaces
Key Point
Listing 19.1 GenericStack.java
19.4 Generic Methods
Key Point
Listing 19.2 GenericMethodDemo.java
Listing 19.3 BoundedTypeDemo.java
19.5 Case Study: Sorting an Array of Objects
Key Point
Listing 19.4 GenericSort.java
19.6 Raw Types and Backward Compatibility
Key Point
Listing 19.5 Max.java
Listing 19.6 MaxUsingGenericType.java
19.7 Wildcard Generic Types
Key Point
Listing 19.7 WildCardNeedDemo.java
Listing 19.8 AnyWildCardDemo.java
Listing 19.9 SuperWildCardDemo.java
19.8 Erasure and Restrictions on Generics
Key Point
19.9 Case Study: Generic Matrix Class
Key Point
Listing 19.10 GenericMatrix.java
Listing 19.11 IntegerMatrix.java
Listing 19.12 RationalMatrix.java
Listing 19.13 TestIntegerMatrix.java
Listing 19.14 TestRationalMatrix.java
Key Terms
Chapter Summary
Quiz
Programming Exercises
Chapter 20 Lists, Stacks, Queues, and Priority Queues
Objectives
20.1 Introduction
Key Point
20.2 Collections
Key Point
Listing 20.1 TestCollection.java
20.3 Iterators
Key Point
Listing 20.2 TestIterator.java
20.4 Using the forEach Method
Key Point
Listing 20.3 TestForEach.java
20.5 Lists
Key Point
20.5.1 The Common Methods in the List Interface
20.5.2 The ArrayList and LinkedList Classes
Listing 20.4 TestArrayAndLinkedList.java
20.6 The Comparator Interface
Key Point
Listing 20.5 GeometricObjectComparator.java
Listing 20.6 TestComparator.java
Listing 20.7 SortStringByLength.java
Listing 20.8 SortStringIgnoreCase.java
20.7 Static Methods for Lists and Collections
Key Point
20.8 Case Study: Bouncing Balls
Key Point
Listing 20.9 MultipleBounceBall.java
20.9 Vector and Stack Classes
Key Point
20.10 Queues and Priority Queues
Key Point
20.10.1 The Queue Interface
20.10.2 Deque and LinkedList
Listing 20.10 TestQueue.java
Listing 20.11 PriorityQueueDemo.java
20.11 Case Study: Evaluating Expressions
Key Point
Phase 1: Scanning the expression
Phase 2: Clearing the stack
Listing 20.12 EvaluateExpression.java
Key Terms
Chapter Summary
Quiz
Programming Exercises
Sections 20.2–20.7
Sections 20.8–20.10
Chapter 21 Sets and Maps
Objectives
21.1 Introduction
Key Point
21.2 Sets
Key Point
21.2.1 HashSet
Listing 21.1 TestHashSet.java
Listing 21.2 TestMethodsInCollection.java
21.2.2 LinkedHashSet
Listing 21.3 TestLinkedHashSet.java
21.2.3 TreeSet
Listing 21.4 TestTreeSet.java
Listing 21.5 TestTreeSetWithComparator.java
21.3 Comparing the Performance of Sets and Lists
Key Point
Listing 21.6 SetListPerformanceTest.java
21.4 Case Study: Counting Keywords
Key Point
Listing 21.7 CountKeywords.java
21.5 Maps
Key Point
Listing 21.8 TestMap.java
21.6 Case Study: Occurrences of Words
Key Point
Listing 21.9 CountOccurrenceOfWords.java
21.7 Singleton and Unmodifiable Collections and Maps
Key Point
Key Terms
Chapter Summary
Quiz
Programming Exercises
Sections 21.2–21.4
Sections 21.5–21.7
Chapter 22 Developing Efficient Algorithms
Objectives
22.1 Introduction
Key Point
22.2 Measuring Algorithm Efficiency Using Big O Notation
Key Point
22.3 Examples: Determining Big O
Key Point
Listing 22.1 PerformanceTest.java
22.4 Analyzing Algorithm Time Complexity
Key Point
22.4.1 Analyzing Binary Search
22.4.2 Analyzing Selection Sort
22.4.3 Analyzing the Tower of Hanoi Problem
22.4.4 Common Recurrence Relations
22.4.5 Comparing Common Growth Functions
22.5 Finding Fibonacci Numbers Using Dynamic Programming
Key Point
Listing 22.2 ImprovedFibonacci.java
22.6 Finding Greatest Common Divisors Using Euclid’s Algorithm
Key Point
Listing 22.3 GCD.java
Listing 22.4 GCDEuclid.java
22.7 Efficient Algorithms for Finding Prime Numbers
Key Point
Listing 22.5 PrimeNumbers.java
Listing 22.6 EfficientPrimeNumbers.java
Listing 22.7 SieveOfEratosthenes.java
22.8 Finding the Closest Pair of Points Using Divide-and-Conquer
Key Point
Listing 22.8 Algorithm for Finding the Closest Pair
Listing 22.9 Algorithm for Obtaining stripL and stripR
Listing 22.10 Algorithm for Finding the Closest Pair in Step 3
22.9 Solving the Eight Queens Problem Using Backtracking
Key Point
Listing 22.11 EightQueens.java
22.10 Computational Geometry: Finding a Convex Hull
Key Point
22.10.1 Gift-Wrapping Algorithm
Listing 22.12 Finding a Convex Hull Using Gift-Wrapping Algorithm
22.10.2 Graham’s Algorithm
Listing 22.13 Finding a Convex Hull Using Graham’s Algorithm
22.11 String Matching
Key Point
Listing 22.14 StringMatch.java
22.11.1 The Boyer-Moore Algorithm
Listing 22.15 StringMatchBoyerMoore.java
22.11.2 The Knuth-Morris-Pratt Algorithm
Listing 22.16 StringMatchKMP.java
Key Terms
Chapter Summary
Quiz
Programming Exercises
Chapter 23 Sorting
Objectives
23.1 Introduction
Key Point
23.2 Insertion Sort
Key Point
Listing 23.1 InsertionSort.java
23.3 Bubble Sort
Key Point
Listing 23.2 Bubble-Sort Algorithm
Listing 23.3 Improved Bubble-Sort Algorithm
Listing 23.4 BubbleSort.java
23.4 Merge Sort
Key Point
Listing 23.5 Merge-Sort Algorithm
Listing 23.6 MergeSort.java
23.5 Quick Sort
Key Point
Listing 23.7 Quick-Sort Algorithm
Listing 23.8 QuickSort.java
23.6 Heap Sort
Key Point
23.6.1 Storing a Heap
23.6.2 Adding a New Node
23.6.3 Removing the Root
23.6.4 The Heap Class
Listing 23.9 Heap.java
23.6.5 Sorting Using the Heap Class
Listing 23.10 HeapSort.java
23.6.6 Heap Sort Time Complexity
23.7 Bucket and Radix Sorts
Key Point
23.8 External Sort
Key Point
Listing 23.11 CreateLargeFile.java
23.8.1 Implementing Phase I
Listing 23.12 Creating Initial Sorted Segments
23.8.2 Implementing Phase II
23.8.3 Combining Two Phases
Listing 23.16 SortLargeFile.java
23.8.4 External Sort Complexity
Key Terms
Chapter Summary
Quiz
Programming Exercises
Sections 23.3–23.5
Section 23.6
Section 23.7
Section 23.8
Comprehensive
Chapter 24 Implementing Lists, Stacks, Queues, and Priority Queues
Objectives
24.1 Introduction
Key Point
24.2 Common Operations for Lists
Key Point
Listing 24.1 MyList.java
24.3 Array Lists
Key Point
Listing 24.2 MyArrayList.java
Listing 24.3 TestMyArrayList.java
24.4 Linked Lists
Key Point
24.4.1 Nodes
24.4.2 The MyLinkedList Class
Listing 24.4 TestMyLinkedList.java
24.4.3 Implementing MyLinkedList
24.4.3.1 Implementing addFirst(e)
24.4.3.2 Implementing addLast(e)
24.4.3.3 Implementing add(index, e)
24.4.3.4 Implementing removeFirst()
24.4.3.5 Implementing removeLast()
24.4.3.6 Implementing remove(index)
Listing 24.5 MyLinkedList.java
24.4.4 MyArrayList vs. MyLinkedList
24.4.5 Variations of Linked Lists
24.5 Stacks and Queues
Key Point
Listing 24.6 GenericQueue.java
Listing 24.7 TestStackQueue.java
24.6 Priority Queues
Key Point
Listing 24.8 MyPriorityQueue.java
Listing 24.9 TestPriorityQueue.java
Chapter Summary
Quiz
Programming Exercises
Chapter 25 Binary Search Trees
Objectives
25.1 Introduction
Key Point
25.2 Binary Search Trees Basics
Key Point
25.3 Representing Binary Search Trees
Key Point
25.4 Searching for an Element
Key Point
Listing 25.1 Searching for an Element e in a BST
25.5 Inserting an Element into a BST
Key Point
Listing 25.2 Inserting an Element into a BST
25.6 Tree Traversal
Key Point
25.7 The BST Class
Key Point
Listing 25.3 Tree.java
Listing 25.4 BST.java
Listing 25.5 TestBST.java
25.8 Deleting Elements from a BST
Key Point
Listing 25.6 Deleting an Element from a BST
Listing 25.7 TestBSTDelete.java
25.9 Tree Visualization and MVC
Key Point
Listing 25.8 BSTAnimation.java
Listing 25.9 BTView.java
25.10 Iterators
Key Point
Listing 25.10 TestBSTWithIterator.java
25.11 Case Study: Data Compression
Key Point
Listing 25.11 HuffmanCode.java
Key Terms
Chapter Summary
Quiz
Programming Exercises
Sections 25.2–25.6
Chapter 26 AVL Trees
Objectives
26.1 Introduction
Key Point
26.2 Rebalancing Trees
Key Point
26.3 Designing Classes for AVL Trees
Key Point
26.4 Overriding the insert Method
Key Point
Listing 26.1 Balancing Nodes on a Path
26.5 Implementing Rotations
Key Point
Listing 26.2 LL Rotation Algorithm
26.6 Implementing the delete Method
Key Point
26.7 The AVLTree Class
Key Point
Listing 26.3 AVLTree.java
26.8 Testing the AVLTree Class
Key Point
Listing 26.4 TestAVLTree.java
26.9 AVL Tree Time Complexity Analysis
Key Point
Key Terms
Chapter Summary
Quiz
Programming Exercises
Chapter 27 Hashing
Objectives
27.1 Introduction
Key Point
27.2 What Is Hashing?
Key Point
27.3 Hash Functions and Hash Codes
Key Point
27.3.1 Hash Codes for Primitive Types
27.3.2 Hash Codes for Strings
27.3.3 Compressing Hash Codes
27.4 Handling Collisions Using Open Addressing
Key Point
27.4.1 Linear Probing
27.4.2 Quadratic Probing
27.4.3 Double Hashing
27.5 Handling Collisions Using Separate Chaining
Key Point
27.6 Load Factor and Rehashing
Key Point
27.7 Implementing a Map Using Hashing
Key Point
Listing 27.1 MyMap.java
Listing 27.2 MyHashMap.java
Listing 27.3 TestMyHashMap.java
27.8 Implementing Set Using Hashing
Key Point
Listing 27.4 MyHashSet.java
Listing 27.5 TestMyHashSet.java
Key Terms
Chapter Summary
Quiz
Programming Exercises
Chapter 28 Graphs and Applications
Objectives
28.1 Introduction
Key Point
28.2 Basic Graph Terminologies
Key Point
28.3 Representing Graphs
Key Point
28.3.1 Representing Vertices
28.3.2 Representing Edges: Edge Array
28.3.3 Representing Edges: Edge Objects
Listing 28.1 Edge.java
28.3.4 Representing Edges: Adjacency Matrices
28.3.5 Representing Edges: Adjacency Lists
28.4 Modeling Graphs
Key Point
Listing 28.2 TestGraph.java
Listing 28.3 Graph.java
Listing 28.4 UnweightedGraph.java
28.5 Graph Visualization
Key Point
Listing 28.5 Displayable.java
Listing 28.6 GraphView.java
Listing 28.7 DisplayUSMap.java
28.6 Graph Traversals
Key Point
28.7 Depth-First Search (DFS)
Key Point
28.7.1 Depth-First Search Algorithm
Listing 28.8 Depth-First Search Algorithm
28.7.2 Implementation of Depth-First Search
Listing 28.9 TestDFS.java
28.7.3 Applications of the DFS
28.8 Case Study: The Connected Circles Problem
Key Point
Listing 28.10 ConnectedCircles.java
28.9 Breadth-First Search (BFS)
Key Point
28.9.1 Breadth-First Search Algorithm
Listing 28.11 Breadth-First Search Algorithm
28.9.2 Implementation of Breadth-First Search
Listing 28.12 TestBFS.java
28.9.3 Applications of the BFS
28.10 Case Study: The Nine Tails Problem
Key Point
Listing 28.13 NineTailModel.java
Listing 28.14 NineTail.java
Key Terms
Chapter Summary
Quiz
Programming Exercises
Sections 28.6–28.10
Chapter 29 Weighted Graphs and Applications
Objectives
29.1 Introduction
Key Point
29.2 Representing Weighted Graphs
Key Point
29.2.1 Representing Weighted Edges: Edge Array
29.2.2 Weighted Adjacency Matrices
29.2.3 Adjacency Lists
Listing 29.1 WeightedEdge.java
29.3 The WeightedGraph Class
Key Point
Listing 29.2 WeightedGraph.java
Listing 29.3 TestWeightedGraph.java
29.4 Minimum Spanning Trees
Key Point
29.4.1 Minimum Spanning Tree Algorithms
Listing 29.4 Prim’s Minimum Spanning Tree Algorithm
29.4.2 Refining Prim’s MST Algorithm
Listing 29.5 Refined Version of Prim’s Algorithm
29.4.3 Implementation of the MST Algorithm
Listing 29.6 TestMinimumSpanningTree.java
29.5 Finding Shortest Paths
Key Point
Listing 29.7 Dijkstra’s Single-Source Shortest-Path Algorithm
Listing 29.8 TestShortestPath.java
29.6 Case Study: The Weighted Nine Tails Problem
Key Point
Listing 29.9 WeightedNineTailModel.java
Listing 29.10 WeightedNineTail.java
Key Terms
Chapter Summary
Quiz
Programming Exercises
Chapter 30 Aggregate Operations for Collection Streams
Objectives
30.1 Introduction
Key Point
30.2 Stream Pipelines
Key Point
Listing 30.1 StreamDemo.java
30.2.1 The Stream.of, limit, and forEach Methods
30.2.2 The sorted Method
30.2.3 The filter Method
30.2.4 The max and min Methods
30.2.5 The anyMatch, allMatch, and noneMatch Methods
30.2.6 The map, distinct, and count Methods
30.2.7 The findFirst, findAny, and toArray Methods
30.3 IntStream, LongStream, and DoubleStream
Key Point
Listing 30.2 IntStreamDemo.java
30.4 Parallel Streams
Key Point
Listing 30.3 ParallelStreamDemo.java
30.5 Stream Reduction Using the reduce Method
Key Point
Listing 30.4 StreamReductionDemo.java
30.6 Stream Reduction Using the collect Method
Key Point
Listing 30.5 CollectDemo.java
30.7 Grouping Elements Using the groupingby Collector
Key Point
Listing 30.6 CollectGroupDemo.java
30.8 Case Studies
Key Point
30.8.1 Case Study: Analyzing Numbers
Listing 30.7 AnalyzeNumbersUsingStream.java
30.8.2 Case Study: Counting the Occurrences of Each Letter
Listing 30.8 CountLettersUsingStream.java
30.8.3 Case Study: Counting the Occurrences of Each Letter in a String
Listing 30.9 CountOccurrenceOfLettersInAString.java
30.8.3 Case Study: Processing All Elements in a Two-Dimensional Array
Listing 30.10 TwoDimensionalArrayStream.java
30.8.4 Case Study: Finding the Directory Size
Listing 30.11 DirectorySizeStream.java
30.8.5 Case Study: Counting Keywords
Listing 30.12 CountKeywordStream.java
30.8.6 Case Study: Occurrences of Words
Listing 30.13 CountOccurrenceOfWordsStream.java
Chapter Summary
Quiz
Programming Exercises
Appendixes
Appendix A Java Keywords and Reserved Words
Appendix B The ASCII Character Set
Appendix C Operator Precedence Chart
Appendix D Java Modifiers
Appendix E Special Floating-Point Values
Appendix F Number Systems
F.1 Introduction
F.2 Conversions between Binary and Decimal Numbers
F.3 Conversions between Hexadecimal and Decimal Numbers
F.4 Conversions between Binary and Hexadecimal Numbers
Appendix G Bitwise Operations
Appendix H Regular Expressions
H.1 Matching Strings
H.2 Regular Expression Syntax
H.3 Replacing and Splitting Strings
H.4 Replacing Partial Content in a Matched Substring
Listing H.1 PatternMatcherDemo.java
Appendix I Enumerated Types
I.1 Simple Enumerated Types
Listing I.1 EnumeratedTypeDemo.java
Listing I.2 StandaloneEnumTypeDemo.java
I.2 Using if or switch Statements with an Enumerated Variable
I.3 Processing Enumerated Values Using a Foreach Loop
I.4 Enumerated Types with Data Fields, Constructors, and Methods
Listing I.3 TrafficLight.java
Listing I.4 TestTrafficLight.java
Appendix J The Big-O, Big-Omega, and Big-Theta Notations
J.1 The Big-O Notation
J.2 The Big-Omega Notation
J.3 The Big-Theta Notation
Quick Reference
Index
Dr. Y. Daniel Liang earned his Ph.D. in Computer Science from the University of Oklahoma in 1991, and his M.S. and B.S. in Computer Science from Fudan University in Shanghai, China in 1986 and 1983. Prior to joining Armstrong State University (now merged with Georgia Southern University), he was an Associate Professor in computer science at Purdue University in Fort Wayne, Indiana, where he twice received the Excellence in Research award.
Dr. Liang is currently a Professor of Computer Science at Georgia Southern University. He was trained in theoretical computer science. He has published in the SIAM Journal on Computing, Discrete Applied Mathematics, Acta Informatics and Information Processing Letters. He is the author of more than 30 books. His popular computer science texts are widely used in the world.
Dr. Liang was elected a Java Champion by Sun Microsystems (now Oracle) in 2005. He has given lectures on programming internationally.
What makes us different?
• Instant Download
• Always Competitive Pricing
• 100% Privacy
• FREE Sample Available
• 24-7 LIVE Customer Support