8/12/2019 Array on Java Programming
1/69
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All
rights reserved. 01321308071
Chapter 5 Arrays
8/12/2019 Array on Java Programming
2/69
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All
rights reserved. 01321308074
Objectives To describe why arrays are necessary in programming.
To declare array reference variables and create arrays.
To initialize the values in an array.
To access array elements using indexed variables.
To declare, create, and initialize an array using an array initializer.
To program common array operations (displaying arrays, summing all elements,
finding min and max elements, random shuffling, shifting elements).
To simplify programming using the for-each loops.
To copy contents from one array to another.
To develop and invoke methods with array arguments and return value.
To define a method with variable-length argument list.
To search elements using the linear or binary search algorithm. To sort an array using the selection sort.
To sort an array using the insertion sort algorithm.
To use the methods in the Arrays class.
8/12/2019 Array on Java Programming
3/69
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All
rights reserved. 01321308075
Introducing Arrays
Array is a data structure that represents a collection of the
same types of data.
5.6
4.5
3.3
13.2
4
34.33
34
45.45
99.993
11123
double[] myList = new double[10];
myList referencemyList[0]
myList[1]
myList[2]
myList[3]
myList[4]
myList[5]
myList[6]
myList[7]
myList[8]
myList[9]
Element value
Array reference
variable
Array element at
index 5
8/12/2019 Array on Java Programming
4/69
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All
rights reserved. 01321308076
Declaring Array Variables
datatype[] arrayRefVar;
Example:
double[] myList;
datatype arrayRefVar[]; // This style is
allowed, but not preferred
Example:
double myList[];
8/12/2019 Array on Java Programming
5/69
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All
rights reserved. 01321308077
Creating Arrays
arrayRefVar = new datatype[arraySize];
Example:
myList = new double[10];
myList[0]references the first element in the array.
myList[9]references the last element in the array.
8/12/2019 Array on Java Programming
6/69
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All
rights reserved. 01321308078
Declaring and Creating
in One Step datatype[] arrayRefVar = new
datatype[arraySize];
double[] myList = new double[10];
datatype arrayRefVar[] = new
datatype[arraySize];
double myList[] = new double[10];
8/12/2019 Array on Java Programming
7/69
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All
rights reserved. 01321308079
The Length of an Array
Once an array is created, its size is fixed. It cannot be
changed. You can find its size using
arrayRefVar.length
For example,
myList.length returns 10
8/12/2019 Array on Java Programming
8/69
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All
rights reserved. 013213080710
Default Values
When an array is created, its elements are
assigned the default value of
0 for the numeric primitive data types,'\u0000' for char types, and
false for boolean types.
8/12/2019 Array on Java Programming
9/69
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All
rights reserved. 013213080711
Indexed Variables
The array elements are accessed through the index. The
array indices are 0-based, i.e., it starts from 0 toarrayRefVar.length-1. In the example in Figure 6.1,
myList holds ten double values and the indices are
from 0 to 9.
Each element in the array is represented using the
following syntax, known as an indexed variable:
arrayRefVar[index];
8/12/2019 Array on Java Programming
10/69
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All
rights reserved. 013213080712
Using Indexed Variables
After an array is created, an indexed variable can
be used in the same way as a regular variable.
For example, the following code adds the value
in myList[0] and myList[1] to myList[2].
myList[2] = myList[0] + myList[1];
8/12/2019 Array on Java Programming
11/69
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All
rights reserved. 013213080713
Array Initializers
Declaring, creating, initializing in one step:
double[] myList = {1.9, 2.9, 3.4, 3.5};
This shorthand syntax must be in onestatement.
8/12/2019 Array on Java Programming
12/69
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All
rights reserved. 013213080714
Declaring, creating, initializing
Using the Shorthand Notation
double[] myList = {1.9, 2.9, 3.4, 3.5};
This shorthand notation is equivalent to the
following statements:
double[] myList = new double[4];
myList[0] = 1.9;
myList[1] = 2.9;myList[2] = 3.4;
myList[3] = 3.5;
8/12/2019 Array on Java Programming
13/69
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All
rights reserved. 013213080715
CAUTION
Using the shorthand notation, youhave to declare, create, and initializethe array all in one statement.
Splitting it would cause a syntaxerror. For example, the following is
wrong:double[] myList;
myList = {1.9, 2.9, 3.4, 3.5};
8/12/2019 Array on Java Programming
14/69
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All
rights reserved. 013213080716
Trace Program with Arrays
public class Test {
public static void main(String[] args) {
int[] values = new int[5];
for (int i = 1; i < 5; i++) {
values[i] = i + values[i-1];
}
values[0] = values[1] + values[4];
}
}
Declare array variable values, create an
array, and assign its reference to values
After the array is created
0
1
2
3
4
0
0
0
0
0
animation
8/12/2019 Array on Java Programming
15/69
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All
rights reserved. 013213080717
Trace Program with Arrays
public class Test {
public static void main(String[] args) {
int[] values = new int[5];
for (int i = 1; i < 5; i++) {
values[i] = i + values[i-1];
}
values[0] = values[1] + values[4];
}
}
i becomes 1
After the array is created
0
1
2
3
4
0
0
0
0
0
animation
8/12/2019 Array on Java Programming
16/69
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All
rights reserved. 013213080718
Trace Program with Arrays
public class Test {
public static void main(String[] args) {
int[] values = new int[5];
for (int i = 1; i < 5; i++) {
values[i] = i + values[i-1];
}
values[0] = values[1] + values[4];
}
}
i (=1) is less than 5
After the array is created
0
1
2
3
4
00
0
0
0
animation
8/12/2019 Array on Java Programming
17/69
i i
8/12/2019 Array on Java Programming
18/69
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All
rights reserved. 013213080720
Trace Program with Arrays
public class Test {
public static void main(String[] args) {
int[] values = new int[5];
for (int i = 1; i < 5; i++) {
values[i] = i + values[i-1];
}
values[0] = values[1] + values[4];
}
}
After i++, i becomes 2
animation
After the first iteration
0
1
2
3
4
0
1
0
0
0
i ti
8/12/2019 Array on Java Programming
19/69
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All
rights reserved. 013213080721
Trace Program with Arrays
public class Test {
public static void main(String[]args) {
int[] values = new int[5];
for (int i = 1; i < 5; i++) {values[i] = i + values[i-1];
}
values[0] = values[1] +values[4];
}
}
i (= 2) is less than 5
animation
After the first iteration
0
1
2
3
4
0
1
0
0
0
i ti
8/12/2019 Array on Java Programming
20/69
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All
rights reserved. 013213080722
Trace Program with Arrays
public class Test {
public static void main(String[] args) {
int[] values = new int[5];
for (int i = 1; i < 5; i++) {
values[i] = i + values[i-1];
}
values[0] = values[1] + values[4];
}
}
After this line is executed,
values[2] is 3 (2 + 1)
After the second iteration
0
1
2
3
4
0
1
3
0
0
animation
animation
8/12/2019 Array on Java Programming
21/69
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All
rights reserved. 013213080723
Trace Program with Arrays
public class Test {
public static void main(String[] args) {
int[] values = new int[5];
for (int i = 1; i < 5; i++) {
values[i] = i + values[i-1];
}
values[0] = values[1] + values[4];
}
}
After this, i becomes 3.
After the second iteration
0
1
2
3
4
0
1
3
0
0
animation
animation
8/12/2019 Array on Java Programming
22/69
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All
rights reserved. 013213080724
Trace Program with Arrays
public class Test {
public static void main(String[] args) {
int[] values = new int[5];
for (int i = 1; i < 5; i++) {
values[i] = i + values[i-1];
}
values[0] = values[1] + values[4];
}
}
i (=3) is still less than 5.
After the second iteration
0
1
2
3
4
0
1
3
0
0
animation
animation
8/12/2019 Array on Java Programming
23/69
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All
rights reserved. 013213080725
Trace Program with Arrays
public class Test {
public static void main(String[] args) {
int[] values = new int[5];
for (int i = 1; i < 5; i++) {
values[i] = i + values[i-1];
}
values[0] = values[1] + values[4];
}
}
After this line, values[3] becomes 6 (3 + 3)
After the third iteration
0
1
2
3
4
0
1
3
6
0
animation
animation
8/12/2019 Array on Java Programming
24/69
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All
rights reserved. 013213080726
Trace Program with Arrays
public class Test {
public static void main(String[] args) {
int[] values = new int[5];
for (int i = 1; i < 5; i++) {
values[i] = i + values[i-1];
}
values[0] = values[1] + values[4];
}
}
After this, i becomes 4
After the third iteration
0
1
2
3
4
0
1
3
6
0
animation
animation
8/12/2019 Array on Java Programming
25/69
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All
rights reserved. 013213080727
Trace Program with Arrays
public class Test {
public static void main(String[] args) {
int[] values = new int[5];
for (int i = 1; i < 5; i++) {
values[i] = i + values[i-1];
}
values[0] = values[1] + values[4];
}
}
i (=4) is still less than 5
After the third iteration
0
1
2
3
4
0
1
3
6
0
animation
animation
8/12/2019 Array on Java Programming
26/69
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All
rights reserved. 013213080728
Trace Program with Arrays
public class Test {
public static void main(String[] args) {
int[] values = new int[5];
for (int i = 1; i < 5; i++) {
values[i] = i + values[i-1];
}
values[0] = values[1] + values[4];
}
}
After this, values[4] becomes 10 (4 + 6)
After the fourth iteration
0
1
2
3
4
0
1
3
6
10
animation
animation
8/12/2019 Array on Java Programming
27/69
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All
rights reserved. 013213080729
Trace Program with Arrays
public class Test {
public static void main(String[] args){
int[] values = new int[5];
for (int i = 1; i < 5; i++) {
values[i] = i + values[i-1];
}
values[0] = values[1] + values[4];
}
}
After i++, i becomes 5
animation
After the fourth iteration
0
1
2
3
4
0
1
3
6
10
animation
8/12/2019 Array on Java Programming
28/69
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All
rights reserved. 013213080730
Trace Program with Arrays
public class Test {
public static void main(String[] args) {
int[] values = new int[5];
for (int i = 1; i < 5; i++) {
values[i] = i + values[i-1];}
values[0] = values[1] + values[4];
}
}
i ( =5) < 5 is false. Exit the loop
animation
After the fourth iteration
0
1
2
3
4
0
1
3
6
10
animation
8/12/2019 Array on Java Programming
29/69
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All
rights reserved. 013213080731
Trace Program with Arrays
public class Test {
public static void main(String[] args) {
int[] values = new int[5];
for (int i = 1; i < 5; i++) {
values[i] = i + values[i-1];
}
values[0] = values[1] + values[4];
}
}
After this line, values[0] is 11 (1 + 10)
0
1
2
3
4
11
1
3
6
10
animation
8/12/2019 Array on Java Programming
30/69
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All
rights reserved. 013213080740
Enhanced for Loop (for-each loop)
JDK 1.5 introduced a new for loop that enables you to traverse the complete array
sequentially without using an index variable. For example, the following code
displays all elements in the array myList:
for (double value: myList)
System.out.println(value);
In general, the syntax is
for (elementType value: arrayRefVar) {
// Process the value
}
You still have to use an index variable if you wish to traverse the array in a
different order or change the elements in the array.
8/12/2019 Array on Java Programming
31/69
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All
rights reserved. 013213080745
Copying ArraysOften, in a program, you need to duplicate an array or a part of an
array. In such cases you could attempt to use the assignment statement(=), as follows:
list2 = list1;
Contents
of list1
list1
Contents
of list2
list2
Beforethe assignment
list2 = list1;
Contents
of list1
list1
Contents
of list2
list2
fterthe assignment
list2 = list1;
Garbage
8/12/2019 Array on Java Programming
32/69
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All
rights reserved. 013213080746
Copying Arrays
Using a loop:int[] sourceArray = {2, 3, 1, 5, 10};
int[] targetArray = new
int[sourceArray.length];
for (int i = 0; i < sourceArrays.length; i++)
targetArray[i] = sourceArray[i];
8/12/2019 Array on Java Programming
33/69
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All
rights reserved. 013213080747
The arraycopyUtility
arraycopy(sourceArray, src_pos,targetArray, tar_pos, length);
Example:
System.arraycopy(sourceArray, 0,
targetArray, 0, sourceArray.length);
8/12/2019 Array on Java Programming
34/69
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All
rights reserved. 013213080748
Passing Arrays to Methodspublic static void printArray(int[] array) {
for (int i = 0; i < array.length; i++) {System.out.print(array[i] + " ");
}
}
Invoke the method
int[] list = {3, 1, 2, 6, 4, 2};
printArray(list);
Invoke the methodprintArray(new int[]{3, 1, 2, 6, 4, 2});
Anonymous array
8/12/2019 Array on Java Programming
35/69
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All
rights reserved. 013213080749
Anonymous Array
The statementprintArray(new int[]{3, 1, 2, 6, 4, 2});
creates an array using the following syntax:
new dataType[]{literal0, literal1, ..., literalk};
There is no explicit reference variable for the array.
Such array is called an anonymous array.
8/12/2019 Array on Java Programming
36/69
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All
rights reserved. 013213080757
Returning an Array from a Methodpublic static int[] reverse(int[] list) {
int[] result = new int[list.length];
for (int i = 0, j = result.length - 1;
i < list.length; i++, j--) {
result[j] = list[i];
}
return result;}
int[] list1 = new int[]{1, 2, 3, 4, 5, 6};int[] list2 = reverse(list1);
list
result
animation
8/12/2019 Array on Java Programming
37/69
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All
rights reserved. 013213080758
Trace the reverse Methodpublic static int[] reverse(int[] list) {
int[] result = new int[list.length];
for (int i = 0, j = result.length - 1;
i < list.length; i++, j--) {
result[j] = list[i];
}
return result;}
int[] list1 = {1, 2, 3, 4, 5, 6};
int[] list2 = reverse(list1);
list
result
1 2 3 4 5 6
0 0 0 0 0 0
Declare result and create array
animation
8/12/2019 Array on Java Programming
38/69
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All
rights reserved. 013213080759
Trace the reverse Method, cont.public static int[] reverse(int[] list) {
int[] result = new int[list.length];
for (int i = 0, j = result.length - 1;
i < list.length; i++, j--) {
result[j] = list[i];
}
return result;}
int[] list1 = new int[]{1, 2, 3, 4, 5, 6};
int[] list2 = reverse(list1);
list
result
1 2 3 4 5 6
0 0 0 0 0 0
i = 0 and j = 5
animation
8/12/2019 Array on Java Programming
39/69
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All
rights reserved. 013213080760
Trace the reverse Method, cont.public static int[] reverse(int[] list) {
int[] result = new int[list.length];
for (int i = 0, j = result.length - 1;
i < list.length; i++, j--) {
result[j] = list[i];
}
return result;}
int[] list1 = new int[]{1, 2, 3, 4, 5, 6};
int[] list2 = reverse(list1);
list
result
1 2 3 4 5 6
0 0 0 0 0 0
i (= 0) is less than 6
animation
8/12/2019 Array on Java Programming
40/69
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All
rights reserved. 013213080761
Trace the reverse Method, cont.public static int[] reverse(int[] list) {
int[] result = new int[list.length];
for (int i = 0, j = result.length - 1;
i < list.length; i++, j--) {
result[j] = list[i];
}
return result;}
int[] list1 = new int[]{1, 2, 3, 4, 5, 6};
int[] list2 = reverse(list1);
list
result
1 2 3 4 5 6
0 0 0 0 0 1
i = 0 and j = 5
Assign list[0] to result[5]
animation
8/12/2019 Array on Java Programming
41/69
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All
rights reserved. 013213080762
Trace the reverse Method, cont.public static int[] reverse(int[] list) {
int[] result = new int[list.length];
for (int i = 0, j = result.length - 1;
i < list.length; i++, j--) {
result[j] = list[i];
}
return result;}
int[] list1 = new int[]{1, 2, 3, 4, 5, 6};
int[] list2 = reverse(list1);
list
result
1 2 3 4 5 6
0 0 0 0 0 1
After this, i becomes 1 and j
becomes 4
animation
8/12/2019 Array on Java Programming
42/69
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All
rights reserved. 013213080763
Trace the reverse Method, cont.public static int[] reverse(int[] list) {
int[] result = new int[list.length];
for (int i = 0, j = result.length - 1;
i < list.length; i++, j--) {
result[j] = list[i];
}
return result;}
int[] list1 = new int[]{1, 2, 3, 4, 5, 6};
int[] list2 = reverse(list1);
list
result
1 2 3 4 5 6
0 0 0 0 0 1
i (=1) is less than 6
animation
8/12/2019 Array on Java Programming
43/69
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All
rights reserved. 013213080764
Trace the reverse Method, cont.public static int[] reverse(int[] list) {
int[] result = new int[list.length];
for (int i = 0, j = result.length - 1;
i < list.length; i++, j--) {
result[j] = list[i];
}
return result;}
int[] list1 = new int[]{1, 2, 3, 4, 5, 6};
int[] list2 = reverse(list1);
list
result
1 2 3 4 5 6
0 0 0 0 2 1
i = 1 and j = 4
Assign list[1] to result[4]
animation
8/12/2019 Array on Java Programming
44/69
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All
rights reserved. 013213080765
Trace the reverse Method, cont.public static int[] reverse(int[] list) {
int[] result = new int[list.length];
for (int i = 0, j = result.length - 1;
i < list.length; i++, j--) {
result[j] = list[i];
}
return result;}
int[] list1 = new int[]{1, 2, 3, 4, 5, 6};
int[] list2 = reverse(list1);
list
result
1 2 3 4 5 6
0 0 0 0 2 1
After this, i becomes 2 and
j becomes 3
animation
8/12/2019 Array on Java Programming
45/69
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All
rights reserved. 013213080766
Trace the reverse Method, cont.public static int[] reverse(int[] list) {
int[] result = new int[list.length];
for (int i = 0, j = result.length - 1;
i < list.length; i++, j--) {
result[j] = list[i];
}
return result;}
int[] list1 = new int[]{1, 2, 3, 4, 5, 6};
int[] list2 = reverse(list1);
list
result
1 2 3 4 5 6
0 0 0 0 2 1
i (=2) is still less than 6
animation
8/12/2019 Array on Java Programming
46/69
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All
rights reserved. 013213080767
Trace the reverse Method, cont.public static int[] reverse(int[] list) {
int[] result = new int[list.length];
for (int i = 0, j = result.length - 1;
i < list.length; i++, j--) {
result[j] = list[i];
}
return result;}
int[] list1 = new int[]{1, 2, 3, 4, 5, 6};
int[] list2 = reverse(list1);
list
result
1 2 3 4 5 6
0 0 0 3 2 1
i = 2 and j = 3
Assign list[i] to result[j]
animation
8/12/2019 Array on Java Programming
47/69
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All
rights reserved. 013213080768
Trace the reverse Method, cont.public static int[] reverse(int[] list) {
int[] result = new int[list.length];
for (int i = 0, j = result.length - 1;
i < list.length; i++, j--) {
result[j] = list[i];
}
return result;}
int[] list1 = new int[]{1, 2, 3, 4, 5, 6};
int[] list2 = reverse(list1);
list
result
1 2 3 4 5 6
0 0 0 3 2 1
After this, i becomes 3 and
j becomes 2
h h d
animation
8/12/2019 Array on Java Programming
48/69
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All
rights reserved. 013213080769
Trace the reverse Method, cont.public static int[] reverse(int[] list) {
int[] result = new int[list.length];
for (int i = 0, j = result.length - 1;
i < list.length; i++, j--) {
result[j] = list[i];
}
return result;}
int[] list1 = new int[]{1, 2, 3, 4, 5, 6};
int[] list2 = reverse(list1);
list
result
1 2 3 4 5 6
0 0 0 3 2 1
i (=3) is still less than 6
h h d
animation
8/12/2019 Array on Java Programming
49/69
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All
rights reserved. 013213080770
Trace the reverse Method, cont.public static int[] reverse(int[] list) {
int[] result = new int[list.length];
for (int i = 0, j = result.length - 1;
i < list.length; i++, j--) {
result[j] = list[i];
}
return result;}
int[] list1 = new int[]{1, 2, 3, 4, 5, 6};
int[] list2 = reverse(list1);
list
result
1 2 3 4 5 6
0 0 4 3 2 1
i = 3 and j = 2
Assign list[i] to result[j]
T h M h d
animation
8/12/2019 Array on Java Programming
50/69
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All
rights reserved. 013213080771
Trace the reverse Method, cont.public static int[] reverse(int[] list) {
int[] result = new int[list.length];
for (int i = 0, j = result.length - 1;
i < list.length; i++, j--) {
result[j] = list[i];
}
return result;}
int[] list1 = new int[]{1, 2, 3, 4, 5, 6};
int[] list2 = reverse(list1);
list
result
1 2 3 4 5 6
0 0 4 3 2 1
After this, i becomes 4 and
j becomes 1
T h M h d
animation
8/12/2019 Array on Java Programming
51/69
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. Allrights reserved. 0132130807
72
Trace the reverse Method, cont.public static int[] reverse(int[] list) {
int[] result = new int[list.length];
for (int i = 0, j = result.length - 1;
i < list.length; i++, j--) {
result[j] = list[i];
}
return result;}
int[] list1 = new int[]{1, 2, 3, 4, 5, 6};
int[] list2 = reverse(list1);
list
result
1 2 3 4 5 6
0 0 4 3 2 1
i (=4) is still less than 6
T h M h d
animation
8/12/2019 Array on Java Programming
52/69
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. Allrights reserved. 0132130807
73
Trace the reverse Method, cont.public static int[] reverse(int[] list) {
int[] result = new int[list.length];
for (int i = 0, j = result.length - 1;
i < list.length; i++, j--) {
result[j] = list[i];
}
return result;}
int[] list1 = new int[]{1, 2, 3, 4, 5, 6};
int[] list2 = reverse(list1);
list
result
1 2 3 4 5 6
0 5 4 3 2 1
i = 4 and j = 1
Assign list[i] to result[j]
T h M h d
animation
8/12/2019 Array on Java Programming
53/69
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. Allrights reserved. 0132130807
74
Trace the reverse Method, cont.public static int[] reverse(int[] list) {
int[] result = new int[list.length];
for (int i = 0, j = result.length - 1;
i < list.length; i++, j--) {
result[j] = list[i];}
return result;}
int[] list1 = new int[]{1, 2, 3, 4, 5, 6};
int[] list2 = reverse(list1);
list
result
1 2 3 4 5 6
0 5 4 3 2 1
After this, i becomes 5 and
j becomes 0
T th M th d t
animation
8/12/2019 Array on Java Programming
54/69
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. Allrights reserved. 0132130807
75
Trace the reverse Method, cont.public static int[] reverse(int[] list) {
int[] result = new int[list.length];
for (int i = 0, j = result.length - 1;
i < list.length; i++, j--) {
result[j] = list[i];}
return result;}
int[] list1 = new int[]{1, 2, 3, 4, 5, 6};
int[] list2 = reverse(list1);
list
result
1 2 3 4 5 6
0 5 4 3 2 1
i (=5) is still less than 6
T th M th d t
animation
8/12/2019 Array on Java Programming
55/69
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. Allrights reserved. 0132130807
76
Trace the reverse Method, cont.public static int[] reverse(int[] list) {
int[] result = new int[list.length];
for (int i = 0, j = result.length - 1;
i < list.length; i++, j--) {
result[j] = list[i];}
return result;}
int[] list1 = new int[]{1, 2, 3, 4, 5, 6};
int[] list2 = reverse(list1);
list
result
1 2 3 4 5 6
6 5 4 3 2 1
i = 5 and j = 0
Assign list[i] to result[j]
T th M th d t
animation
8/12/2019 Array on Java Programming
56/69
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. Allrights reserved. 0132130807
77
Trace the reverse Method, cont.public static int[] reverse(int[] list) {
int[] result = new int[list.length];
for (int i = 0, j = result.length - 1;
i < list.length; i++, j--) {
result[j] = list[i];}
return result;}
int[] list1 = new int[]{1, 2, 3, 4, 5, 6};
int[] list2 = reverse(list1);
list
result
1 2 3 4 5 6
6 5 4 3 2 1
After this, i becomes 6 and
j becomes -1
T th M th d t
animation
8/12/2019 Array on Java Programming
57/69
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. Allrights reserved. 0132130807
78
Trace the reverse Method, cont.public static int[] reverse(int[] list) {
int[] result = new int[list.length];
for (int i = 0, j = result.length - 1;
i < list.length; i++, j--) {
result[j] = list[i];}
return result;}
int[] list1 = new int[]{1, 2, 3, 4, 5, 6};
int[] list2 = reverse(list1);
list
result
1 2 3 4 5 6
6 5 4 3 2 1
i (=6) < 6 is false. So exit
the loop.
T th M th d t
animation
8/12/2019 Array on Java Programming
58/69
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. Allrights reserved. 0132130807
79
Trace the reverse Method, cont.public static int[] reverse(int[] list) {
int[] result = new int[list.length];
for (int i = 0, j = result.length - 1;
i < list.length; i++, j--) {
result[j] = list[i];}
return result;}
int[] list1 = new int[]{1, 2, 3, 4, 5, 6};
int[] list2 = reverse(list1);
list
result
1 2 3 4 5 6
6 5 4 3 2 1
Return result
list2
S hi A
8/12/2019 Array on Java Programming
59/69
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. Allrights reserved. 0132130807
81
Searching Arrays
public class LinearSearch {
/** The method for finding a key in the list */
public static int linearSearch(int[] list, int key) {
for (int i = 0; i < list.length; i++)if (key == list[i])
return i;
return -1;
}
}
list
key Compare key with list[i] for i = 0, 1,
[0] [1] [2]
Searching is the process of looking for a specific element in
an array; for example, discovering whether a certain score isincluded in a list of scores. Searching is a common task incomputer programming. There are many algorithms anddata structures devoted to searching. In this section, two
commonly used approaches are discussed, linear searchandbinary search.
8/12/2019 Array on Java Programming
60/69
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. Allrights reserved. 0132130807
82
Linear SearchThe linear search approach compares the keyelement, key,sequentiallywith each element in
the array list. The method continues to do so
until the key matches an element in the list orthe list is exhausted without a match being
found. If a match is made, the linear search
returns the index of the element in the array
that matches the key. If no match is found, the
search returns -1.
Li S h A i ianimation
8/12/2019 Array on Java Programming
61/69
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. Allrights reserved. 0132130807
83
Linear Search Animation
6 4 1 9 7 3 2 8
6 4 1 9 7 3 2 8
6 4 1 9 7 3 2 8
6 4 1 9 7 3 2 8
6 4 1 9 7 3 2 8
6 4 1 9 7 3 2 8
3
3
3
3
3
3
Key List
F Id t S l ti
8/12/2019 Array on Java Programming
62/69
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. Allrights reserved. 0132130807
84
From Idea to Solution/** The method for finding a key in the list */
public static int linearSearch(int[] list, int key) {for (int i = 0; i < list.length; i++)
if (key == list[i])
return i;
return -1;
}
int[] list = {1, 4, 4, 2, 5, -3, 6, 2};
int i = linearSearch(list, 4); // returns 1
int j = linearSearch(list, -4); // returns -1
int k = linearSearch(list, -3); // returns 5
Trace the method
8/12/2019 Array on Java Programming
63/69
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. Allrights reserved. 0132130807
85
Binary SearchFor binary search to work, the elements in thearray must already be ordered. Without loss of
generality, assume that the array is in
ascending order.e.g., 2 4 7 10 11 45 50 59 60 66 69 70 79
The binary search first compares the key with
the element in the middle of the array.
8/12/2019 Array on Java Programming
64/69
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. Allrights reserved. 0132130807
86
Binary Search, cont. If the key is less than the middle element,
you only need to search the key in the firsthalf of the array.
If the key is equal to the middle element,the search ends with a match.
If the key is greater than the middleelement, you only need to search the key inthe second half of the array.
Consider the following three cases:
animation
8/12/2019 Array on Java Programming
65/69
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. Allrights reserved. 0132130807
87
Binary Search
1 2 3 4 6 7 8 9
1 2 3 4 6 7 8 9
1 2 3 4 6 7 8 9
8
8
8
Key List
Binary Search cont
8/12/2019 Array on Java Programming
66/69
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. Allrights reserved. 0132130807
88
Binary Search, cont.[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12]
2 4 7 10 11 45 50 59 60 66 69 70 79
key is 11
key < 50
list
mid
[0] [1] [2] [3] [4] [5]
key > 7
key == 11
highlow
mid highlow
list
[3] [4] [5]
mid highlow
list
2 4 7 10 11 45
10 11 45
Binary Search cont
mid
hi h
low
8/12/2019 Array on Java Programming
67/69
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. Allrights reserved. 0132130807
89
Binary Search, cont.[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12]
2 4 7 10 11 45 50 59 60 66 69 70 79
key is 54
key > 50
list
mid
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12]
key < 66
key < 59
highlow
mid highlow
list
[7] [8]
mid highlow
list
59 60 66 69 70 79
59 60
[6] [7] [8]
highlow
59 60
Binary Search, cont.
8/12/2019 Array on Java Programming
68/69
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. Allrights reserved. 0132130807
90
Binary Search, cont.The binarySearch method returns the index of the
element in the list that matches the search key if itis contained in the list. Otherwise, it returns
-insertion point - 1.
The insertion point is the point at which the key
would be inserted into the list.
The Arrays binarySearch Method
8/12/2019 Array on Java Programming
69/69
The Arrays.binarySearch MethodSince binary search is frequently used in programming, Java provides severaloverloaded binarySearch methods for searching a key in an array of int, double,
char, short, long, and float in the java.util.Arrays class. For example, thefollowing code searches the keys in an array of numbers and an array ofcharacters.
int[] list = {2, 4, 7, 10, 11, 45, 50, 59, 60, 66, 69, 70, 79};
System.out.println("Index is " +
java.util.Arrays.binarySearch(list, 11));
char[] chars = {'a', 'c', 'g', 'x', 'y', 'z'};
System.out.println("Index is " +
java.util.Arrays.binarySearch(chars, 't'));
For the binarySearch method to work, the array must be pre-sorted in increasingorder.
Return is 4
Return is4 (insertion point is
3, so return is -3-1)
Top Related