CSO Gaddis Java Chapter07 6e
CSO Gaddis Java Chapter07 6e
R7
Arrays and
the ArrayList
Class
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-2
Chapter Topics
Chapter 7 discusses the following main topics:
– The Sequential Search Algorithm
– Parallel Arrays
– Two-Dimensional Arrays
– Arrays with Three or More Dimensions
– The Selection Sort and the Binary Search
– Command-Line Arguments
– The ArrayList Class
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-3
Introduction to Arrays
• Primitive variables are designed to hold only
one value at a time.
• Arrays allow us to create a collection of like
values that are indexed.
• An array can store any type of data but only
one type of data at a time.
• An array is a list of data elements.
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-4
Creating Arrays
• An array is an object so it needs an object reference.
• The next step creates the array and assigns its address to the
numbers variable.
// Create a new array that will hold 6 integers.
numbers = new int[6];
0 0 0 0 0 0
index 0 index 1 index 2 index 3 index 4 index 5
Array element values are initialized to 0.
Array indexes always start at 0.
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-5
Creating Arrays
• It is possible to declare an array reference and create it
in the same statement.
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-6
Creating Arrays
• The array size must be a non-negative number.
• It may be a literal value, a constant, or variable.
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-7
Accessing the Elements of an Array
20 0 0 0 0 0
numbers[0] numbers[1] numbers[2] numbers[3] numbers[4] numbers[5]
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-8
Inputting and Outputting
Array Elements
• Array elements can be treated as any other variable.
• They are simply accessed by the same name and a
subscript.
• See example: ArrayDemo1.java
• Array subscripts can be accessed using variables (such
as for loop counters).
• See example: ArrayDemo2.java
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-9
Bounds Checking
• Array indexes always start at zero and continue to
(array length - 1).
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-10
Off-by-One Errors
• It is very easy to be off-by-one when accessing arrays.
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-11
Array Initialization
• When relatively few items need to be initialized, an
initialization list can be used to initialize the array.
int[]days = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-12
Alternate Array Declaration
• Previously we showed arrays being declared:
int[] numbers;
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-13
Processing Array Contents
• Processing data in an array is the same as any other variable.
grossPay = hours[3] * payRate;
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-14
Processing Array Contents
• Array elements can be used in relational operations:
if(cost[20] < cost[0])
{
//statements
}
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-17
The Enhanced for Loop
Example:
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-18
Array Size
• The length constant can be used in a loop
to provide automatic bounding.
Index subscripts start at 0 and end at one less than the
array length.
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-19
Array Size
• You can let the user specify the size of an array:
int numTests;
int[] tests;
Scanner keyboard = new Scanner(System.in);
System.out.print("How many tests do you have? ");
numTests = keyboard.nextInt();
tests = new int[numTests];
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-20
Reassigning Array References
• An array reference can be assigned to another array of
the same type.
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-21
Reassigning Array References
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-22
Reassigning Array References
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-23
Copying Arrays
• This is not the way to copy an array.
int[] array1 = { 2, 4, 6, 8, 10 };
int[] array2 = array1; // This does not copy array1.
2 4 6 8 10
array1 holds an
Address
address to the array
Example:
array2 holds an
SameArray.java
Address
address to the array
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-24
Copying Arrays
• You cannot copy an array by merely assigning one
reference variable to another.
• You need to copy the individual elements of one array to
another.
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-25
Passing Array Elements to a Method
• When a single element of an array is passed to a
method it is handled like any other variable.
• See example: PassElements.java
• More often you will want to write methods to process
array data by passing the entire array, not just one
element at a time.
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-26
Passing Arrays as Arguments
• Arrays are objects.
• Their references can be passed to methods like any
other object reference variable.
showArray(numbers); 5 10 15 20 25 30 35 40
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-28
Comparing Arrays: Example
int[] firstArray = { 2, 4, 6, 8, 10 };
int[] secondArray = { 2, 4, 6, 8, 10 };
boolean arraysEqual = true;
int i = 0;
if (arraysEqual)
System.out.println("The arrays are equal.");
else
System.out.println("The arrays are not equal.");
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-29
Useful Array Operations
• Finding the Highest Value
int [] numbers = new int[50];
int highest = numbers[0];
for (int i = 1; i < numbers.length; i++)
{
if (numbers[i] > highest)
highest = numbers[i];
}
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-30
Useful Array Operations
• Summing Array Elements:
int total = 0; // Initialize accumulator
for (int i = 0; i < units.length; i++)
total += units[i];
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-31
Partially Filled Arrays
• Typically, if the amount of data that an array must hold is unknown:
– size the array to the largest expected number of elements.
– use a counting variable to keep track of how much valid data is in the
array.
…
int[] array = new int[100];
int count = 0;
…
System.out.print("Enter a number or -1 to quit: ");
number = keyboard.nextInt();
while (number != -1 && count <= 99)
{
array[count] = number;
count++;
System.out.print("Enter a number or -1 to quit: ");
number = keyboard.nextInt();
} input, number and keyboard were
… previously declared and keyboard
references a Scanner object
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-32
Arrays and Files
• Saving the contents of an array to a file:
int[] numbers = {10, 20, 30, 40, 50};
PrintWriter outputFile =
new PrintWriter ("Values.txt");
outputFile.close();
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-33
Arrays and Files
• Reading the contents of a file into an array:
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-34
Returning an Array Reference
• A method can return a reference to an array.
• The return type of the method must be declared as an array of the
right type.
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-36
String Arrays
• If an initialization list is not provided, the new keyword must
be used to create the array:
String[] names = new String[4];
Address
names[0] null
names[1] null
names[2] null
names[3] null
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-37
String Arrays
• When an array is created in this manner, each element of the
array must be initialized.
names[0] = "Bill";
names[1] = "Susan";
The names variable holds names[2] = "Steven";
the address to the array. names[3] = "Jean";
Address
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-38
Calling String Methods On Array
Elements
• String objects have several methods, including:
– toUpperCase
– compareTo
– equals
– charAt
• Each element of a String array is a String object.
• Methods can be used by using the array name and index as
before.
System.out.println(names[0].toUpperCase());
char letter = names[3].charAt(0);
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-39
The length Field & The length Method
• Arrays have a final field named length.
• String objects have a method named length.
• To display the length of each string held in a String array:
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-40
Arrays of Objects
• Because Strings are objects, we know that arrays can contain
objects.
BankAccount[] accounts = new BankAccount[5];
accounts[1] Address
balance: 0.0
accounts[2] Address
accounts[3] Address balance: 0.0
accounts[4] Address
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-42
The Sequential Search Algorithm
• A search algorithm is a method of locating a specific
item in a larger collection of data.
• The sequential search algorithm uses a loop to:
– sequentially step through an array,
– compare each element with the search value, and
– stop when
• the value is found or
• the end of the array is encountered.
• See example: SearchArray.java
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-43
Two-Dimensional Arrays
• A two-dimensional array is an array of arrays.
• It can be thought of as having rows and columns.
row 1
row 2
row 3
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-44
Two-Dimensional Arrays
• Declaring a two-dimensional array requires two sets of brackets
and two size declarators
– The first one is for the number of rows
– The second one is for the number of columns.
double[][] scores = new double[3][4];
• The two sets of brackets in the data type indicate that the scores
variable will reference a two-dimensional array.
• Notice that each size declarator is enclosed in its own set of
brackets.
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-45
Accessing Two-Dimensional Array
Elements
• When processing the data in a two-dimensional array,
each element has two subscripts:
– one for its row and
– another for its column.
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-46
Accessing Two-Dimensional Array
Elements
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-47
Accessing Two-Dimensional Array
Elements
Accessing one of the elements in a two-dimensional
array requires the use of both subscripts.
The scores variable scores[2][1] = 95;
holds the address of a
2D array of doubles.
column 0 column 1 column 2 column 3
Address
row 0 0 0 0 0
row 1 0 0 0 0
row 2 0 95 0 0
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-48
Accessing Two-Dimensional Array
Elements
• Programs that process two-dimensional arrays can do
so with nested loops.
• To fill the scores array: Number of rows, not the
largest subscript
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-49
Accessing Two-Dimensional Array
Elements
• To print out the scores array:
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-50
Initializing a Two-Dimensional Array
• Initializing a two-dimensional array requires enclosing each
row’s initialization list in its own set of braces.
• Java automatically creates the array and fills its elements with
the initialization values.
– row 0 {1, 2, 3}
– row 1 {4, 5, 6}
– row 2 {7, 8, 9}
• Declares an array with three rows and three columns.
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-51
Initializing a Two-Dimensional Array
int[][] numbers = {{1, 2, 3},
{4, 5, 6},
{7, 8, 9}};
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-52
The length Field
• Two-dimensional arrays are arrays of one-dimensional
arrays.
• The length field of the array gives the number of rows
in the array.
• Each row has a length constant tells how many
columns is in that row.
• Each row can have a different number of columns.
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-53
The length Field
• To access the length fields of the array:
int[][] numbers = { { 1, 2, 3, 4 },
{ 5, 6, 7 },
{ 9, 10, 11, 12 } };
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-54
Summing The Elements of a Two-
Dimensional Array
int[][] numbers = { { 1, 2, 3, 4 },
{5, 6, 7, 8},
{9, 10, 11, 12} };
int total;
total = 0;
for (int row = 0; row < numbers.length; row++)
{
for (int col = 0; col < numbers[row].length; col++)
total += numbers[row][col];
}
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-55
Summing The Rows of a Two-
Dimensional Array
int[][] numbers = {{ 1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}};
int total;
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-56
Summing The Columns of a Two-
Dimensional Array
int[][] numbers = {{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}};
int total;
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-57
Passing and Returning Two-
Dimensional Array References
• There is no difference between passing a single or
two-dimensional array as an argument to a method.
• The method must accept a two-dimensional array
as a parameter.
• See example: Pass2Darray.java
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-58
Ragged Arrays
• When the rows of a two-dimensional array are of different
lengths, the array is known as a ragged array.
• You can create a ragged array by creating a two-
dimensional array with a specific number of rows, but no
columns.
int [][] ragged = new int [4][];
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-59
More Than Two Dimensions
• Java does not limit the number of dimensions that an array may
be.
• More than three dimensions is hard to visualize, but can be
useful in some programming problems.
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-60
Selection Sort
• In a selection sort:
– The smallest value in the array is located and moved to
element 0.
– Then the next smallest value is located and moved to
element 1.
– This process continues until all of the elements have been
placed in their proper order.
– See example: SelectionSortDemo.java
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-61
Binary Search
• A binary search:
– requires an array sorted in ascending order.
– starts with the element in the middle of the array.
– If that element is the desired value, the search is over.
– Otherwise, the value in the middle element is either greater or less
than the desired value
– If it is greater than the desired value, search in the first half of the
array.
– Otherwise, search the last half of the array.
– Repeat as needed while adjusting start and end points of the search.
• See example: BinarySearchDemo.java
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-62
Command-Line Arguments
• A Java program can receive arguments from the operating
system command-line.
• The main method has a header that looks like this:
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-63
Command-Line Arguments
• To run the example:
• Example: CommandLine.java
• It is not required that the name of main’s
parameter array be args.
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-64
Variable-Length Argument Lists
• Special type parameter – vararg…
– Vararg parameters are actually arrays
– Examples: VarArgsDemo1.java, VarargsDemo2.java
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-65
The ArrayList Class
• Similar to an array, an ArrayList allows object storage
• Unlike an array, an ArrayList object:
– Automatically expands when a new item is added
– Automatically shrinks when items are removed
• Requires:
import java.util.ArrayList;
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-66
Creating an ArrayList
ArrayList<String> nameList = new ArrayList<String>();
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-67
Using an ArrayList
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-68
Using an ArrayList
• Example: ArrayListDemo1.java
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-69
Using an ArrayList
• The ArrayList class's toString method returns a string
representing all items in the ArrayList
System.out.println(nameList);
This statement yields :
[ James, Catherine ]
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-70
Using an ArrayList
• The ArrayList class's add method with one argument adds
new items to the end of the ArrayList
• To insert items at a location of choice, use the add method with
two arguments:
nameList.add(1, "Mary");
This statement inserts the String "Mary" at index 1
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-71
Using an ArrayList
• An ArrayList has a capacity, which is the number of items
it can hold without increasing its size.
• The default capacity of an ArrayList is 10 items.
• To designate a different capacity, use a parameterized
constructor:
ArrayList<String> list = new ArrayList<String>(100);
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-72
Using an ArrayList
• You can store any type of object in an ArrayList
ArrayList<BankAccount> accountList =
new ArrayList<BankAccount>();
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-73
Using an ArrayList
// Create an ArrayList to hold BankAccount objects.
ArrayList<BankAccount> list = new ArrayList<BankAccount>();
See: ArrayListDemo6.java
©2016 Pearson Education, Inc. Upper Saddle River, NJ. All Rights Reserved. 7-74
Using an ArrayList
• The diamond operator
– Beginning in Java 7, you can use the <> operator
for simpler ArrayList declarations: