When you enroll in this course, you'll also be asked to select a specific program.
Learn new concepts from industry experts
Gain a foundational understanding of a subject or tool
Develop job-relevant skills with hands-on projects
Earn a shareable career certificate
There are 6 modules in this course
How do Java programs deal with vast quantities of data? Many of the data structures and algorithms that work with introductory toy examples break when applications process real, large data sets. Efficiency is critical, but how do we achieve it, and how do we even measure it?
This is an intermediate Java course. We recommend this course to learners who have previous experience in software development or a background in computer science, and in particular, we recommend that you have taken the first course in this specialization (which also requires some previous experience with Java).
In this course, you will use and analyze data structures that are used in industry-level applications, such as linked lists, trees, and hashtables. You will explain how these data structures make programs more efficient and flexible. You will apply asymptotic Big-O analysis to describe the performance of algorithms and evaluate which strategy to use for efficient data retrieval, addition of new data, deletion of elements, and/or memory usage.
The program you will build throughout this course allows its user to manage, manipulate and reason about large sets of textual data. This is an intermediate Java course, and we will build on your prior knowledge. This course is designed around the same video series as in our first course in this specialization, including explanations of core content, learner videos, student and engineer testimonials, and support videos -- to better allow you to choose your own path through the course!
Welcome to the first module in the second course of our Intermediate Java Programming Specialization. We'll start with introductions again: to ourselves, the Google engineers, and the structure of the course. After the introduction we'll have a short warm up to get you comfortable with the code you will be building on to this class. But don't worry--no graded programming assignments yet. This week is all about getting comfortable and excited to learn.
What's included
7 videos9 readings3 assignments
Show info about module content
7 videos•Total 21 minutes
Course Title•0 minutes
Welcome (Object Oriented Java Programming: Data Structures and Beyond Specialization)•3 minutes
Welcome (Object Oriented Programming in Java Specialization)•2 minutes
Your path through the course•5 minutes
Concept Challenges•3 minutes
In the Real World: Welcome from Google Engineers•1 minute
Project Prototype•6 minutes
9 readings•Total 103 minutes
A Customized Welcome to this Course•10 minutes
After completing this course, you will be able to...•5 minutes
Is this course right for me?•10 minutes
Up Next: A short survey•0 minutes
If you want more practice before you begin...•10 minutes
The structure of this course•10 minutes
Project Overview•8 minutes
Setting up Java and Eclipse•20 minutes
Getting and Working with the Starter Code•30 minutes
3 assignments•Total 50 minutes
Pre-Course Quiz•10 minutes
Survey: Your goals for the course•30 minutes
Quiz about the Starter Code and Course Structure•10 minutes
Working with Strings
Module 2•8 hours to complete
Module details
This week we're going to dive into the course programming project. In the first lesson you'll learn about Strings and Regular Expressions, and in the programming assignment this week you'll apply that knowledge to adding functionality to your text editor so that it can measure the "readability" of text by calculating something called the "Flesch Readability Score". This course is focused on building code that not only does interesting things, but also finishes them quickly. So, let's get started building some code!
Core: Introduction to the Flesch Readability Score•6 minutes
Core: Basics of Strings in Java•6 minutes
Core: Working with Strings in Java•9 minutes
Support: For-Each Loops, part 1 of 5•2 minutes
Support: For-Each Loops, part 2 of 5•5 minutes
Support: For-Each Loops, part 3 of 5•5 minutes
Support: For-Each Loops, part 4 of 5•10 minutes
Support: For-Each Loops, part 5 of 5•2 minutes
Core: Introduction to Regular Expressions•10 minutes
When I struggled: Regular expressions•2 minutes
Concept Challenge: Regular Expressions•9 minutes
Support: More with Regular Expressions•9 minutes
Project: Programming Assignment Walk Through•10 minutes
6 readings•Total 54 minutes
A note about week numbers•10 minutes
By the end of this week, you will be able to...•4 minutes
Did you have trouble with any question(s) on the practice quiz?•10 minutes
Week 2: Additional Resources•10 minutes
Programming Assignment FAQ•10 minutes
Week 2: Congratulations and quiz answers•10 minutes
3 assignments•Total 55 minutes
Where to next?•30 minutes
Strings and Regular Expressions•15 minutes
Module and Programming Assignment Quiz•10 minutes
1 programming assignment•Total 300 minutes
How Easy to Read is Your Writing?•300 minutes
1 discussion prompt•Total 10 minutes
What questions do you have about Strings and Regular Expressions?•10 minutes
Efficiency Analysis and Benchmarking
Module 3•6 hours to complete
Module details
Welcome to week 3! The text-editor application you worked with last week does something, but it doesn't do it particularly fast. This week we'll start talking about efficiency. We'll introduce the concept of "Big-O" notation, which sounds a little silly, but is really a powerful (and extremely common) way of analyzing a program's efficiency, independent of the system that it's running on and the exact details of how it's implemented. Then we'll go the other direction and dive into the details, talking about how to measure the actual running time of a piece of code to get an idea of how it really performs in practice.
Core: Our Motivation for Asymptotic Analysis•8 minutes
Core: Counting Operations•10 minutes
Core: Introduction to Asymptotic Analysis, Part 1•9 minutes
Core: Introduction to Asymptotic Analysis, Part 2•4 minutes
Core: Computing Big O with Consecutive Operations•5 minutes
Core: Computing Big O with Nested Operations•5 minutes
Concept Challenge: Classifying Functions using Big O•8 minutes
Support: Analyzing Selection Sort•9 minutes
Concept Challenge: Estimating Big O from Code•6 minutes
Core: Worst, Best, and Average Cases•8 minutes
In the Real World: Worst Case Analysis•2 minutes
Core: Analyzing Search Algorithms•6 minutes
Core: Analyzing Sorting Algorithms•9 minutes
When I struggled: Algorithm performance•2 minutes
Core: Merge Sort•11 minutes
Core: A Summary of Sorting•4 minutes
Core: Common Pitfalls in Asymptotic Analysis•6 minutes
Core: Introduction to Benchmarking•7 minutes
Core: Using Java Time•3 minutes
Core: Analyzing Timings•7 minutes
Concept Challenge: Relating Timing Data to Algorithm Analysis•5 minutes
Project: Week 3 Project Walk Through•4 minutes
3 readings•Total 25 minutes
By the end of this week, you will be able to...•5 minutes
Week 3: Additional Resources•10 minutes
Week 3: Congratulations and quiz answers•10 minutes
4 assignments•Total 85 minutes
Where to next?•30 minutes
Practice Quiz•30 minutes
Asymptotic Notation and Analysis•5 minutes
Module and After Programming Assignment Quiz•20 minutes
1 programming assignment•Total 120 minutes
Making Flesch Score Calculation More Efficient•120 minutes
Interfaces, Linked Lists vs. Arrays, and Correctness
Module 4•11 hours to complete
Module details
This week we'll start talking about some of the basic concepts that one expects to find in a data structures course: the idea of data abstraction, and a data structure called a Linked List. Even though Linked Lists are not very efficient structures (for the most part), they do hit home the idea of "linking" pieces of data together in your computer's memory, rather than storing the data in one contiguous region. This linking idea will be central to many of the more advanced data structures, namely trees and graphs, that are coming up later in this course and in the next course in this specialization. In this module you'll also learn tools and procedures for unit testing your code, which is a way to make sure that what you've written is correct, and a staple practice of any sophisticated software developer.
Welcome to week 4! We know you've been working hard. We hope you tried that optional Markov Text Generation programming assignment last week, but if not, no worries. You can always go back and do it later (spoiler alert: it's pretty amazing that such a simple algorithm can produce such realistic text). This week there's more fun (and hard work) as we learn about trees. Trees rely on the same linked structure idea as Linked Lists, only they're MUCH faster (usually...). In the project this week you'll add auto-complete to your text editor. Believe us when we say it's so cool when you get it working! You'll see... and we bet you can't wait for the programming assignment now. :)
Core: Post-Order, In-Order, and Level-Order Traversals (Breadth-first search)•9 minutes
When I struggled: Why traverse a tree?•1 minute
Core: Introduction to Binary Search Trees•6 minutes
Core: Searching in a BST•3 minutes
Support: Code for BST's "Find" Method•8 minutes
Core: Inserting into a BST•4 minutes
Support: Code for BST's "Insert" Method•6 minutes
Core: Deleting from a BST•4 minutes
Concept Challenge: BST Shape•7 minutes
Core: Performance of BSTs and Balancing, Part 1•10 minutes
Core: Performance of BSTs and Balancing, Part 2•7 minutes
Core: Introduction to Tries•8 minutes
Core: Performance of Tries•4 minutes
Core: Implementing a Trie•7 minutes
Project: Week 5 Project Walk Through•13 minutes
3 readings•Total 25 minutes
By the end of this week, you will be able to...•5 minutes
Week 5: Additional Resources•10 minutes
Week 5: Congratulations and quiz answers•10 minutes
2 assignments•Total 50 minutes
Where to next?•30 minutes
Week 5 Content and Programming Assignment Quiz•20 minutes
1 programming assignment•Total 180 minutes
Spell Checking and Autocomplete•180 minutes
Hash Maps and Edit Distance
Module 6•7 hours to complete
Module details
You made it to the last week! Congratulations on getting this far! In this last week we'll be looking at a fundamental data structure called a Hash Table. If you thought trees were fast, just wait until you see what Hash Tables can do! Your last programming assignment will add spelling correction suggestions to your text editor, and there's an optional assignment that builds on the same ideas as the main assignment too, if you have the time and energy.
UC San Diego is an academic powerhouse and economic engine, recognized as one of the top 10 public universities by U.S. News and World Report. Innovation is central to who we are and what we do. Here, students learn that knowledge isn't just acquired in the classroom—life is their laboratory.
"To be able to take courses at my own pace and rhythm has been an amazing experience. I can learn whenever it fits my schedule and mood."
Jennifer J.
Learner since 2020
"I directly applied the concepts and skills I learned from my courses to an exciting new project at work."
Larry W.
Learner since 2021
"When I need courses on topics that my university doesn't offer, Coursera is one of the best places to go."
Chaitanya A.
"Learning isn't just about being better at your job: it's so much more than that. Coursera allows me to learn without limits."
Learner reviews
4.8
2,250 reviews
5 stars
82.35%
4 stars
14.53%
3 stars
1.86%
2 stars
0.44%
1 star
0.80%
Showing 3 of 2250
A
AB
5·
Reviewed on Jan 16, 2017
A very good course for beginners , people having prior knowledge about data structures might found it a bit easy , anyways the projects were fun and was course was worth taking
A
AI
4·
Reviewed on Nov 24, 2016
Again the explanation and representation was good.3.5-4 stars for some Data Structures and their performance. Few basic ideas and introduction about the gui of the project would make it 5stars.
A
AE
5·
Reviewed on Dec 5, 2016
Very solid review of data structures. In fact, I learned a lot of new things along the way like how to benchmark test Java code and how to properly use JUnit and other unit testing frameworks.
When will I have access to the lectures and assignments?
To access the course materials, assignments and to earn a Certificate, you will need to purchase the Certificate experience when you enroll in a course. You can try a Free Trial instead, or apply for Financial Aid. The course may offer 'Full Course, No Certificate' instead. This option lets you see all course materials, submit required assessments, and get a final grade. This also means that you will not be able to purchase a Certificate experience.
What will I get if I subscribe to this Specialization?
When you enroll in the course, you get access to all of the courses in the Specialization, and you earn a certificate when you complete the work. Your electronic Certificate will be added to your Accomplishments page - from there, you can print your Certificate or add it to your LinkedIn profile.
Is financial aid available?
Yes. In select learning programs, you can apply for financial aid or a scholarship if you can’t afford the enrollment fee. If fin aid or scholarship is available for your learning program selection, you’ll find a link to apply on the description page.