DS-JAVA.AP1
Data Structures and Abstractions with Java
Learn the essential data structures and algorithms in Java to improve your programming efficiency and problem-solving skills.
- Practice in 74 Hands-On Labs — nothing to install
- 37 Interactive Lessons and 284 topics mapped to the official exam objectives
- 725 Practice Test Questions
Intermediate Self-paced · 1 year access 4.4/5 (330 Reviews)
74 Hands-On LiveLabs
Practice real IT tasks in guided environments.
- Real environments
- Auto-graded
- No installation
01 / Skills you'll get
What you will be able to do
- Implement data structures using arrays and linked lists.
- Monitor and optimize algorithm effectiveness and efficiency using Big Oh notation.
- Develop skills in recursion and solving problems using recursive methods.
- Utilize various sorting algorithms, including selection, insertion, merge, and quick sort.
- Gain expertise in hashing techniques and implementing dictionaries.
- Experiment with use cases of balanced search trees like AVL trees and red-black trees.
- Implement different Java data structures.
- Familiarity with Java-specific concepts like interfaces, generics, and exceptions.
- Get practical experience in designing and reusing classes, and using Java's class library.
Course Highlights
-
37 Structured Lessons Comprehensive coverage of core course objectives
-
74 Hands-On LiveLabs Interactive guided scenarios with instant evaluation
-
725 Practice Questions Assessment tests with detailed answer rationales
-
1 Year Full Access Self-paced learning accessible anytime on all devices
02 / Lessons & labs
See exactly what you will learn and practice
Lessons
37 Interactive Lessons · 284 topics01 Introduction 1 topics +
- Organizing Data
02 Prelude: Designing Classes 7 topics +
- Encapsulation
- Specifying Methods
- Java Interfaces
- Choosing Classes
- Reusing Classes
- Exercises
- Projects
03 Bags 11 topics · 4 LiveLab +
- The Bag
- Specifying a Bag
- Using the ADT Bag
- Using an ADT Is Like Using a Vending Machine
- The ADT Set
- Java Class Library: The Interface Set
- Java Interlude 1: Generics
- Lesson Summary
- Programming Tip
- Exercises
- Projects
4 LiveLab in this lesson — see the labs panel →
04 Bag Implementations That Use Arrays 8 topics · 1 LiveLab +
- Using a Fixed-Size Array to Implement the ADT Bag
- Using Array Resizing to Implement the ADT Bag
- The Pros and Cons of Using an Array to Implement the ADT Bag
- Java Interlude 2 Exceptions
- Lesson Summary
- Programming Tips
- Exercises
- Projects
1 LiveLab in this lesson — see the labs panel →
05 A Bag Implementation That Links Data 9 topics · 3 LiveLab +
- Linked Data
- A Linked Implementation of the ADT Bag
- Removing an Item from a Linked Chain
- A Class Node That Has Set and Get Methods
- The Pros and Cons of Using a Chain to Implement the ADT Bag
- Lesson Summary
- Programming Tip
- Exercises
- Projects
3 LiveLab in this lesson — see the labs panel →
06 The Efficiency of Algorithms 8 topics · 3 LiveLab +
- Motivation
- Measuring an Algorithm’s Efficiency
- Big Oh Notation
- Picturing Efficiency
- The Efficiency of Implementations of the ADT Bag
- Lesson Summary
- Exercises
- Projects
3 LiveLab in this lesson — see the labs panel →
07 Stacks 8 topics · 8 LiveLab +
- Specifications of the ADT Stack
- Using a Stack to Process Algebraic Expressions
- The Program Stack
- Java Class Library: The Class Stack
- Lesson Summary
- Programming Tip
- Exercises
- Projects
8 LiveLab in this lesson — see the labs panel →
08 Stack Implementations 7 topics · 3 LiveLab +
- A Linked Implementation
- An Array-Based Implementation
- A Vector-Based Implementation
- Java Interlude 3: More About Exceptions
- Lesson Summary
- Exercises
- Projects
3 LiveLab in this lesson — see the labs panel →
09 Queues, Deques, and Priority Queues 7 topics · 3 LiveLab +
- The ADT Queue
- The ADT Deque
- The ADT Priority Queue
- Lesson Summary
- Programming Tip
- Exercises
- Projects
3 LiveLab in this lesson — see the labs panel →
10 Queue, Deque, and Priority Queue Implementations 10 topics · 2 LiveLab +
- A Linked Implementation of a Queue
- An Array-Based Implementation of a Queue
- Circular Linked Implementations of a Queue
- Java Class Library: The Class AbstractQueue
- A Doubly Linked Implementation of a Deque
- Possible Implementations of a Priority Queue
- Lesson Summary
- Programming Tip
- Exercises
- Projects
2 LiveLab in this lesson — see the labs panel →
11 Recursion 12 topics · 3 LiveLab +
- What Is Recursion?
- Tracing a Recursive Method
- Recursive Methods That Return a Value
- Recursively Processing an Array
- Recursively Processing a Linked Chain
- The Time Efficiency of Recursive Methods
- Tail Recursion
- Using a Stack Instead of Recursion
- Lesson Summary
- Programming Tips
- Exercises
- Projects
3 LiveLab in this lesson — see the labs panel →
12 Lists 7 topics · 1 LiveLab +
- Specifications for the ADT List
- Using the ADT List
- Java Class Library: The Interface List
- Java Class Library: The Class ArrayList
- Lesson Summary
- Exercises
- Projects
1 LiveLab in this lesson — see the labs panel →
13 A List Implementation That Uses an Array 5 topics · 2 LiveLab +
- Using an Array to Implement the ADT List
- The Efficiency of Using an Array to Implement the ADT List
- Lesson Summary
- Exercises
- Projects
2 LiveLab in this lesson — see the labs panel →
14 A List Implementation That Links Data 10 topics · 2 LiveLab +
- Operations on a Chain of Linked Nodes
- Beginning the Implementation
- Continuing the Implementation
- A Refined Implementation
- The Efficiency of Using a Chain to Implement the ADT List
- Java Class Library: The Class LinkedList
- Java Interlude 4: Iterators
- Lesson Summary
- Exercises
- Projects
2 LiveLab in this lesson — see the labs panel →
15 Iterators for the ADT List 9 topics · 3 LiveLab +
- Ways to Implement an Iterator
- A Separate Class Iterator
- An Inner Class Iterator
- Why Are Iterator Methods in Their Own Class?
- An Array-Based Implementation of the Interface ListIterator
- Lesson Summary
- Programming Tip
- Exercises
- Projects
3 LiveLab in this lesson — see the labs panel →
16 Problem Solving with Recursion 9 topics · 1 LiveLab +
- A Simple Solution to a Difficult Problem
- A Poor Solution to a Simple Problem
- Languages and Grammars
- Indirect Recursion
- Backtracking
- Java Interlude 5: More About Generics
- Lesson Summary
- Exercises
- Projects
1 LiveLab in this lesson — see the labs panel →
17 An Introduction to Sorting 9 topics · 3 LiveLab +
- Organizing Java Methods That Sort an Array
- Selection Sort
- Insertion Sort
- Shell Sort
- Comparing the Algorithms
- Lesson Summary
- Programming Tip
- Exercises
- Projects
3 LiveLab in this lesson — see the labs panel →
18 Faster Sorting Methods 8 topics · 4 LiveLab +
- Merge Sort
- Quick Sort
- Radix Sort
- Comparing the Algorithms
- Java Interlude 6: Mutable and Immutable Objects
- Lesson Summary
- Exercises
- Projects
4 LiveLab in this lesson — see the labs panel →
19 Sorted Lists 7 topics · 3 LiveLab +
- Specifications for the ADT Sorted List
- A Linked Implementation
- An Implementation That Uses the ADT List
- Java Interlude 7: Inheritance and Polymorphism
- Lesson Summary
- Exercises
- Projects
3 LiveLab in this lesson — see the labs panel →
20 Inheritance and Lists 7 topics · 1 LiveLab +
- Using Inheritance to Implement a Sorted List
- Designing a Base Class
- An Efficient Implementation of a Sorted List
- Lesson Summary
- Programming Tips
- Exercises
- Projects
1 LiveLab in this lesson — see the labs panel →
21 Searching 11 topics · 2 LiveLab +
- The Problem
- Searching an Unsorted Array
- Searching a Sorted Array
- Searching an Unsorted Chain
- Searching a Sorted Chain
- Choosing a Search Method
- Java Interlude 8: Generics Once Again
- Lesson Summary
- Programming Tip
- Exercises
- Projects
2 LiveLab in this lesson — see the labs panel →
22 Dictionaries 7 topics · 2 LiveLab +
- Specifications for the ADT Dictionary
- Using the ADT Dictionary
- Java Class Library: The Interface Map
- Lesson Summary
- Programming Tips
- Exercises
- Projects
2 LiveLab in this lesson — see the labs panel →
23 Dictionary Implementations 6 topics · 1 LiveLab +
- Array-Based Implementations
- Linked Implementations
- Lesson Summary
- Programming Tips
- Exercises
- Projects
1 LiveLab in this lesson — see the labs panel →
24 Introducing Hashing 6 topics · 1 LiveLab +
- What Is Hashing?
- Hash Functions
- Resolving Collisions
- Lesson Summary
- Exercises
- Projects
1 LiveLab in this lesson — see the labs panel →
25 Hashing as a Dictionary Implementation 9 topics · 1 LiveLab +
- The Efficiency of Hashing
- Rehashing
- Comparing Schemes for Collision Resolution
- A Dictionary Implementation That Uses Hashing
- Java Class Library: The Class HashMap
- Java Class Library: The Class HashSet
- Lesson Summary
- Exercises
- Projects
1 LiveLab in this lesson — see the labs panel →
26 Trees 8 topics · 3 LiveLab +
- Tree Concepts
- Traversals of a Tree
- Java Interfaces for Trees
- Examples of Binary Trees
- Examples of General Trees
- Lesson Summary
- Exercises
- Projects
3 LiveLab in this lesson — see the labs panel →
27 Tree Implementations 10 topics · 2 LiveLab +
- The Nodes in a Binary Tree
- An Implementation of the ADT Binary Tree
- An Implementation of an Expression Tree
- General Trees
- Using a Binary Tree to Represent a General Tree
- Java Interlude 9: Cloning
- Lesson Summary
- Programming Tips
- Exercises
- Projects
2 LiveLab in this lesson — see the labs panel →
28 A Binary Search Tree Implementation 10 topics · 2 LiveLab +
- Getting Started
- Searching and Retrieving
- Traversing
- Adding an Entry
- Removing an Entry
- The Efficiency of Operations
- An Implementation of the ADT Dictionary
- Lesson Summary
- Exercises
- Projects
2 LiveLab in this lesson — see the labs panel →
29 A Heap Implementation 9 topics · 3 LiveLab +
- Reprise: The ADT Heap
- Using an Array to Represent a Heap
- Adding an Entry
- Removing the Root
- Creating a Heap
- Heap Sort
- Lesson Summary
- Exercises
- Projects
3 LiveLab in this lesson — see the labs panel →
30 Balanced Search Trees 8 topics · 1 LiveLab +
- AVL Trees
- 2-3 Trees
- 2-4 Trees
- Red-Black Trees
- B-Trees
- Lesson Summary
- Exercises
- Projects
1 LiveLab in this lesson — see the labs panel →
31 Graphs 8 topics · 4 LiveLab +
- Some Examples and Terminology
- Traversals
- Topological Order
- Paths
- Java Interfaces for the ADT Graph
- Lesson Summary
- Exercises
- Projects
4 LiveLab in this lesson — see the labs panel →
32 Graph Implementations 6 topics · 2 LiveLab +
- An Overview of Two Implementations
- Vertices and Edges
- An Implementation of the ADT Graph
- Lesson Summary
- Exercises
- Projects
2 LiveLab in this lesson — see the labs panel →
33 Appendix A: Documentation and Programming Style 3 topics +
- Naming Variables and Classes
- Indenting
- Comments
34 Appendix B: Java Classes 5 topics +
- Objects and Classes
- Using the Methods in a Java Class
- Defining a Java Class
- Enumeration as a Class
- Packages
35 Appendix C: Creating Classes from Other Classes 3 topics +
- Composition
- Inheritance
- Type Compatibility and Superclasses
36 Supplement 1: Java Basics 13 topics +
- Introduction
- Elements of Java
- Simple Input and Output Using the Keyboard and Screen
- The if-else Statement
- The switch Statement
- Enumerations
- Scope
- Loops
- The Class String
- The Class StringBuilder
- Using Scanner to Extract Pieces of a String
- Arrays
- Wrapper Classes
37 Supplement 2: File Input and Output 3 topics +
- Preliminaries
- Text Files
- Binary Files
Hands-On Labs Our edge
74 LiveLabs- Counting the Occurrence of Each Item in a Bag
- Performing Matrix Multiplication
- Transposing a Matrix
- Finding the Intersection of Two Arrays
- Handling an Exception
- Counting the Entries in a Bag
- Adding a Node at the End of a Doubly Linked Chain
- Removing First Node from a Doubly Linked Chain
- Adding Nodes to the Beginning of a Doubly Linked Chain
- Searching an Entry in a Bag
- Rearranging the Integers in an Array
- Creating a Stack and Adding Five Elements to it
- Removing an Element from a Stack
- Searching an Element in a Stack
- Transferring the Elements of One Stack to Another
- Transforming an Infix Expression to a Postfix Expression
- Evaluating a Postfix Expression
- Evaluating an Infix Expression
- Testing an Input String for Palindrome Using a Stack
- Creating an Array-Based Stack to Retrieve the Topmost Entry
- Creating a Vector-Based Stack to Retrieve the Topmost Entry
- Creating Custom Exception Class
- Creating a Queue
- Creating a Deque
- Creating a Priority Queue
- Removing the First Element from a Circular Linked Queue
- Removing the First Element from a Doubly Linked Deque
- Creating a Recursive Void Method to Print First Five Natural Numbers
- Traversing the Elements of a Linked List in Reverse Order
- Creating a Recursive Method to Return the Factorial of a Number
- Replacing an Element in the Linked List
- Removing an Element from the Specified Position in a Linked List
- Locating an Element in the Linked List
- Adding an Element at the Specified Position in a Linked List
- Converting an ArrayList to an Array
- Working with a List
- Traversing a List
- Removing Duplicates from the List
- Evaluating a Prefix Expression
- Sorting an Array using Selection Sort
- Sorting an Array using Insertion Sort
- Sorting an Array using Shell Sort
- Sorting an Array using Merge Sort
- Sorting an Array using Quick Sort
- Sorting an Array using Radix Sort
- Replacing a Word Using the StringBuilder Class
- Inserting an Element into a Sorted Array
- Using Polymorphism
- Using the Abstract Class
- Sorting a List using Inheritance
- Performing Sequential Search
- Performing Binary Search
- Implementing a Dictionary
- Implementing a Map
- Searching for a Key in a Dictionary
- Using Linear Probing in a Hash Table
- Implementing HashMap
- Traversing a Binary Tree using Inorder Traversal
- Traversing a Binary Tree using Preorder Traversal
- Traversing a Binary Tree Using Postorder Traversal
- Counting the Nodes of a Binary Tree
- Computing the Height of a Binary Tree
- Searching a Node in the Binary Search Tree
- Removing a Node from a Binary Search Tree
- Adding Nodes to a Max Heap
- Removing the Maximum Value Node from a Max Heap
- Sorting an Array using Heap Sort
- Adding Nodes to an AVL Tree
- Using the DFS Traversal
- Using the BFS Traversal
- Using Topological Sort
- Using Dijkstra's Algorithm
- Printing an Adjacency List
- Printing an Adjacency Matrix
03 / FAQs
Questions before you start
What is data structures and abstraction (DSA)? +
What is an abstraction in Java?+
Is DSA important for Java developers?+
Can I learn DSA in 1 month? +
How can I start DSA as a beginner? +
Build Strong Data Abstractions and Structures
Enroll in our data structures and abstractions with Java course today to learn all about data manipulation and algorithms.
- 1 year of full access
- 74 LiveLab included
- Certificate of completion