+ All Categories
Home > Documents > Array on Java Programming

Array on Java Programming

Date post: 03-Jun-2018
Category:
Upload: dyra-haiyi
View: 232 times
Download: 0 times
Share this document with a friend

of 69

Transcript
  • 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)


Recommended