Array Basics Suppose you need to process daily temperatures for a 12-month period in a science...

31
Array Basics Suppose you need to process daily temperatures for a 12-month period in a science project, would you use 365 variables? You can, but would you? An array is a collection of data values of the same data type. If your program needs to deal with 100 integers, 365 real numbers, etc., you will use an array.

Transcript of Array Basics Suppose you need to process daily temperatures for a 12-month period in a science...

Array Basics

Suppose you need to process daily temperatures for a 12-month period in a science project, would you use 365 variables?

You can, but would you?

An array is a collection of data values of the same data type.

If your program needs to deal with 100 integers, 365 real numbers, etc., you will use an array.

Arrays Variables are Reference Variables

Primitive variables contain values

Reference variables point at objects

byte short

intdouble

long

floatboolean

String

AppletMessageBox

HiLoInputBox

etc.

char

primitive reference

Data Type

Primitive Arrays

A primitive array stores multiple values of the same primitive data type.

rainfall0 1 2 3 4 5 6 7 8 9 10 11

The index of the firstposition in an array is 0.

Arrays of Primitive Data Types

Array Declaration

<data type> [ ] <variable> //variation 1<data type> <variable>[ ] //variation 2

Array Creation

<variable> = new <data type> [ <size> ]

Example

double[] rainfall;

rainfall = new double[12];

Variation 1

double rainfall [ ];

rainfall = new double[12];

Variation 2

An array is like an object!

Accessing Individual Elements

Individual elements in an array accessed with the indexed expression.

double[] rainfall = new double[12];

rainfall0 1 2 3 4 5 6 7 8 9 10 11

rainfall[2]This indexed expression refers to the element at position #2

This indexed expression refers to the element at position #2

Example Programs

Zadoot … out to reality … ArrayElements1.java

Zadoot … out to reality … ArrayElements2.java

Array Lengths

double[] rainfall = new double[12];

double annualAverage;

double sum = 0.0;

int index;

for (index = 0; index < rainfall.length; index++) {

rainfall[index] = keyboard.nextDouble();

sum += rainfall[index];

}

annualAverage = sum / rainfall.length;

The public constant length returns the capacity of an array.

The public constant length returns the capacity of an array.

Phrrud … out to reality … ArrayRain.java

Phrrud … out to reality … ArrayAverages.java

Array Bounds Errors

Trying to access an array element that does not exist causes a runtime error

Negative indices

Indices beyond the size

Falop … out to reality … ArrayBoundsError.java

Array Initialization

Like other data types, arrays can be declared and initialized at the same time.

int[] number = { 2, 4, 6, 8 };

double[] samplingData = { 2.443, 8.99, 12.3, 45.009, 18.2, 9.00, 3.123, 22.084, 18.08 };

The capacity of the array is set to the number of elements in the list.

number.lengthsamplingData.length

4 9

Groeeet … out to reality … ArrayInit.java

(Secretly, Java pre-initializes arrays to the default value for the type, e.g., 0 for int arrays.)

References are Pointers

A reference variable points to an object

So, arrays are like objects, but don't worry about that for now – we’ll come back to it.

But it does mean you can

Lose an array

Have an array variable pointing nowhere

Have multiple references to an array

Not copy an array with =

Losing an Array

Code State of Memory

customer

A. A. The variable is allocated in memory.

A. A. The variable is allocated in memory.

AA

int[] customer;int[] customer;BB

customer = new int[5];customer = new int[5];

CC

customer = new int[5];customer = new int[5];B. B. The reference to the

new array is assigned to customercustomer.

B. B. The reference to the new array is assigned to customercustomer.

Arrayin

Memory

Arrayin

Memory

C. C. The reference to another array overwrites the reference in customer.customer.

C. C. The reference to another array overwrites the reference in customer.customer.

Arrayin

Memory

Arrayin

Memory

Garbage Collection

An array that has no references is garbage collected by the java program

Spaaocie … out to reality … ArrayGC.java

The array to no-where

An array variable can be explicitly made to point to no data, using the null value

A null array is different from an array of length zero.

Spaaocie … out to reality … ArrayNULL.java

Having Two References to an Array

Code State of Memory

AA

int[] clemens, twain;int[] clemens, twain; BB

clemens = new int[5];clemens = new int[5];

CC

twain = clemens;twain = clemens;

A. A. Variables are allocated in memory.

A. A. Variables are allocated in memory.

clemens

twain

B. B. The reference to the new array is assigned to clemensclemens.

B. B. The reference to the new array is assigned to clemensclemens.

Arrayin

Memory

Arrayin

Memory

C. C. The reference in clemensclemens is assigned to

customer.customer.

C. C. The reference in clemensclemens is assigned to

customer.customer.

Dooop … out to reality … ArrayDup.java

Cloning an Array

An array can be copied using the clone method

It's necessary to cast the clone to the right array type

Babababoom … out to reality … ArrayClone.java

Two-Dimensional Arrays

Two-dimensional arrays are useful in representing tabular information.

Declaring and Creating a 2-D Array

Declaration

<data type> [][] <variable> //variation 1<data type> <variable>[][] //variation 2

Creation

<variable> = new <data type> [<size1>][<size2>]

Example

double[][] payScaleTable;

payScaleTable = new double[4][5];

3

2

1

0

43210

Example Programs

Ieeei … out to reality … ArrayMatrix.java

Ieeei … out to reality … ArrayCalendar.java

Ieeei … out to reality … ArrayCube.java

Multi-dimensional Arrays … NOT

Java does not really have multi-dimensional arrays

Java has arrays of arrays

int[][] data = new int[3][5];

is shorthand for

int[][] data = new int[3][];data[0] = new int[5];data[1] = new int[5];data[2] = new int[5];

Multi-dimensional Arrays in RAM

int[][] data = new int[3][5];

Zuuu … out to reality … ArrayRAMMatrix.java

Zuuu … out to reality … ArrayRAMCube.java

Irregular Arrays

int[][] weirdData = new int[3][];

weirdData[0] = new int[5];weirdData[1] = new int[4];weirdData[2] = new int[7];

Irregular Arrays

int[][] weirdData = new int[3][];

weirdData[0] = new int[5];weirdData[1] = new int[4];weirdData[2] = new int[7];

weirdData.length == 3

weirdData[1].length == 4

Jioooul … out to reality … ArrayIrreg1.java

Irregular Arrays … null

int[][] data = new int[3][];

data[0] = new int[5];data[1] = new int[4];data[2] = null;

Jioooul … out to reality … ArrayIrreg2.java

Multi-dimensional Array Initialization

Like 1D arrays, it is possible to declare and initialize a multi-dimensional array at the same time.

Frong … out to reality … ArrayMDInit.java

Frong … out to reality … ArrayCubeInit.java

Passing Arrays to Methods - 1

Code

State of Memory

minOne = searchMinimum(arrayOne);

public int searchMinimum(float[] number)){

}

AA

At before searchMinimumAA

arrayOneA. A. Local variable number does not exist before the method execution

A. A. Local variable number does not exist before the method execution

Passing Arrays to Methods - 2

Code

State of Memory

minOne = searchMinimum(arrayOne);

public int searchMinimum(float[] number)){

}

arrayOne

BB

arrayOne

The address is copied at BB

numberB. B. The value of the argument, which is an address, is copied to the parameter.

B. B. The value of the argument, which is an address, is copied to the parameter.

arrayOne number

While at inside the methodCC

Passing Arrays to Methods - 3

Code

State of Memory

minOne = searchMinimum(arrayOne);

public int searchMinimum(float[] number)){

}

CC

C. C. The array is accessed via number inside the method.

C. C. The array is accessed via number inside the method.

arrayOne number

Passing Arrays to Methods - 4

Code

State of Memory

minOne = searchMinimum(arrayOne);

public int searchMinimum(float[] number)){

}DD

arrayOne

At after searchMinimumDD

D. D. The parameter is erased. The argument still points to the same object.

D. D. The parameter is erased. The argument still points to the same object.

Example Programs

Flunot … out to reality … ArrayParamAvg.java

Flunot … out to reality … ArrayParam1.java

Returning Arrays

Array variables in methods exist until the method ends, but the array data lives while referenced

An array variable can be returned from a method

The receiving array variable then refers to the array data, and the array persists

Wrrbbrack … out to reality … ArrayParam2.java

Local arrays

Array variables in methods exist until the method ends

The array data referred to by such an array variable is lost and garbage collected when the method ends

Dessserts … out to reality … ArrayLocalGC.java