[MUSIC] Welcome to the next module in our MOOC on Java for Android programming, which focuses on constructs for storing and processing collections of structured data within a single object. After completing the lessons in this module, you will understand how Java arrays work and how to access and process arrays efficiently. You will also recognize the key classes and interfaces in the Java collections framework. Finally, we will explore several classes from this framework in detail, including ArrayLists and HashMaps. So you will learn how they work, what their pros and cons are, and how to use them effectively to create android apps. [MUSIC] In this module, we are going to explore Java's capabilities for storing structured data. To help motivate the need for the subject, let's consider this sample problem. Say we want to compute the average test score for a classroom of students where the number of students may vary from class to class. Giving this problem a little thought, we determine that we can easily write a solution for this with the knowledge we have so far. We can simply read in the number of students and then create a cumulative sum loop that will read the specified number of times and read in each student's score and add it to the total. After reading all scores and exiting the loop, we can divide the total by the number of students to compute and report the average. It is a simple, straightforward solution. Now, consider this slight twist to the problem. Besides computing the average, we also want to report which scores were below the average so that we can give extra help to those students. To solve this new problem, we need each test score twice. Once so we that can compute the average and then again to compare against the average, we might be tempted to create a variable for each test score. But since the number of students can vary, we don't know how many variables to create. And such code would become unruly if there were more than just a few students. So with our current knowledge of Java, we cannot come up with a good solution to this problem. To solve this problem, we need a way to store a whole bunch of data together. And we need to be able to treat the collection as a single entity but still have access to any individual piece of data in the collection. We need to be able to process all the data elements in the collection in an easy manner. And we need to access the elements as many times as needed and in whatever order needed. All of these are very important capabilities that we have carefully avoided up to this point. Java has several different solutions that we could apply to this problem and to similar problems. We will consider arrays first. Since they are the oldest and most standard structure found in programming languages. In addition to arrays, Java also has a collections framework which contains several structures that we can use. The collections framework contains many structures, including lists, maps, sets, cue's, et cetera. The structures have different properties so that a program can choose the most appropriate structure for any given problem. For this class we only have time to look at ArrayList and HashMaps. [MUSIC].