This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
ArraysArrays
Clark Savage Turner, J.D., Ph.D.Clark Savage Turner, J.D., Ph.D.
These notes do rely heavily on ones originally developedThese notes do rely heavily on ones originally developed by John Lewis and William Loftus to accompany by John Lewis and William Loftus to accompany
An An arrayarray is an ordered list of values is an ordered list of values
0 1 2 3 4 5 6 7 8 9
79 87 94 82 67 98 87 81 74 91
An array of size N is indexed from zero to N-1An array of size N is indexed from zero to N-1
scores
The entire arrayThe entire arrayhas a single namehas a single name
Each value has a numeric Each value has a numeric indexindex
This array holds 10 values that are indexed from 0 to 9This array holds 10 values that are indexed from 0 to 9
write & save on board
CSC-101
ArraysArrays
A particular value in an array is referenced using A particular value in an array is referenced using the array namethe array name followed by followed by the indexthe index (position) (position) in bracketsin brackets
For example, the expressionFor example, the expression
scores[2]scores[2]
refers to the value 94 (which is the 3rd value in the array)refers to the value 94 (which is the 3rd value in the array)
That expression represents a place to store a single integer, That expression represents a place to store a single integer, and can be used wherever an integer variable can be usedand can be used wherever an integer variable can be used
For example, it can be assigned a value, printed, or For example, it can be assigned a value, printed, or used in a calculationused in a calculation
CSC-101
Referring to Array ElementsReferring to Array Elements
Suppose Suppose jj is is 33 and and kk is is 55 and you use and you use
validvalid scores[ 4 ]scores[ 4 ] // scores[4] is 67// scores[4] is 67 scores[ j ]scores[ j ] // scores[3] is 82// scores[3] is 82 scores[ k ]scores[ k ] // scores[5] is 98// scores[5] is 98 scores[ j + k ]scores[ j + k ] // scores[8] is 74// scores[8] is 74 scores[ k % j ]scores[ k % j ] // scores[2] is 94// scores[2] is 94
invalidinvalid scores[ 4.0 ]scores[ 4.0 ] // double, not int// double, not int scores[ scores[ ''44'' ] ] // char, not int// char, not int scores[ scores[ ""44"" ] ] // String, not int// String, not int scores[ j * k ]scores[ j * k ] // 15 is out of bounds// 15 is out of bounds scores[ 2 * k ]scores[ 2 * k ] // 10 is also out, by 1// 10 is also out, by 1
CSC-101
ArraysArrays
An array stores multiple values of the An array stores multiple values of the samesame type type That type can be a primitive type or an object typeThat type can be a primitive type or an object type
Therefore, we can create Therefore, we can create an array of integers, or an array of integers, or an array of characters, or an array of characters, or an array of String objects, oran array of String objects, or an array our own objects, an array our own objects, etc.etc.
In Java, the array itself is an object, soIn Java, the array itself is an object, so the name of the array is an object reference variable, & the name of the array is an object reference variable, & the array itself is instantiated separately.the array itself is instantiated separately.
CSC-101
Declaring ArraysDeclaring Arrays
The The scoresscores array could be declared as follows: array could be declared as follows: int[] scores = new int[10];int[] scores = new int[10]; This is the same as:This is the same as: int[] scores;int[] scores;
scores = new int[10];scores = new int[10];
The variable The variable scoresscores is declared to be of type is declared to be of type int[]int[] (that is, an array of integers)(that is, an array of integers)
It is set to a new array object that can hold 10 integersIt is set to a new array object that can hold 10 integers
Note that the type of the array does not specify its size, but Note that the type of the array does not specify its size, but each object of that type has a specific sizeeach object of that type has a specific size
See See BasicArrayBasicArray.java.java (page 270)(page 270)
CSC-101
Declaring ArraysDeclaring Arrays
Some examples of array declarations:Some examples of array declarations:
float[] prices = new float[500];float[] prices = new float[500];
boolean[] flags;boolean[] flags;
flags = new boolean[20];flags = new boolean[20];
char[] codes = new char[1750];char[] codes = new char[1750];
CSC-101
Initializing ArraysInitializing Arrays
When arrays are declared, each cell is always initialized.When arrays are declared, each cell is always initialized. With primitive data types:With primitive data types:
You may initialize them yourself:You may initialize them yourself:int[ ] numbers = { 1, 2, 3, 4, 5}int[ ] numbers = { 1, 2, 3, 4, 5}
If you don’t, initial values are established for you:If you don’t, initial values are established for you:int[ ] digits = new int [5];int[ ] digits = new int [5]; // set each to 0 (zero)// set each to 0 (zero)
With objects:With objects: You may initialize them yourself:You may initialize them yourself:
If you don’t, initial values are established for you:If you don’t, initial values are established for you:String[ ] words = new String [5]; String[ ] words = new String [5]; // set each to null// set each to null
But it is a semantic error (at best) to refer to an But it is a semantic error (at best) to refer to an uninstantiated (null) array elementuninstantiated (null) array element
CSC-101
Bounds CheckingBounds Checking
Once an array is created, it has a fixed sizeOnce an array is created, it has a fixed size
An index used in an array reference must specify An index used in an array reference must specify a valid elementa valid element The index value must be in bounds (0 to N-1)The index value must be in bounds (0 to N-1) The Java interpreter will throw an exception The Java interpreter will throw an exception
if an array index is out of bounds if an array index is out of bounds
This is called automatic bounds checking, andThis is called automatic bounds checking, andwe have encountered this in another form alreadywe have encountered this in another form alreadyString myString = "something";String myString = "something";
For example, if the array For example, if the array codescodes can hold 100 values, it can can hold 100 values, it can only be indexed using the numbers 0 to 99only be indexed using the numbers 0 to 99
If If countcount has the value 100, then the following reference has the value 100, then the following reference will cause an will cause an ArrayOutOfBoundsExceptionArrayOutOfBoundsException::
It’s common to introduce It’s common to introduce off-by-one errorsoff-by-one errors when using when using arraysarrays
for (int index=0; index <= 100; index++)codes[index] = index*50 + epsilon;
problem
CSC-101
Bounds CheckingBounds Checking
Each array object has a public constant (an instance Each array object has a public constant (an instance variable) called variable) called lengthlength that stores the size of the array that stores the size of the array Note that Note that lengthlength holds the number of elements, holds the number of elements,
not the largest indexnot the largest index Like any other Like any other object,object, it is referenced via it is referenced via
the array name:the array name: scores.lengthscores.length
Compare and contrast this with the String method myString.length()myString.length()
See See ReverseNumbersReverseNumbers.java.java (page 272)(page 272) See See LetterCountLetterCount.java.java (page 274)(page 274)
CSC-101
Initializer ListsInitializer Lists
An An initializer listinitializer list can be used to instantiate and initialize an can be used to instantiate and initialize an array in one steparray in one step
The values are delimited by braces and separated by The values are delimited by braces and separated by commascommas
Examples:Examples:
int[] units = {147, 323, 89, 933, 540, int[] units = {147, 323, 89, 933, 540,
Note that when an initializer list is used:Note that when an initializer list is used: the the newnew operator is not used operator is not used
(an initializer list can be used only in (an initializer list can be used only in the declaration of an array)the declaration of an array)
no size value is specifiedno size value is specified
(the size of the initialized array is determined (the size of the initialized array is determined by the number of items in the initializer list)by the number of items in the initializer list)
Technically, the brackets of the array type can be Technically, the brackets of the array type can be associated with the array’sassociated with the array’s element type, or itselement type, or its namename
Therefore the following declarations are equivalent:Therefore the following declarations are equivalent:
float[] prices;float[] prices;
float prices[];float prices[];
The first format is generally more readable, and preferred.The first format is generally more readable, and preferred.
CSC-101
Arrays as ParametersArrays as Parameters
An entire array can be passed to a method as a parameterAn entire array can be passed to a method as a parameter
Like any other object, the reference to the array is passed, Like any other object, the reference to the array is passed, making aliases of the formal and actual parameters. Thus:making aliases of the formal and actual parameters. Thus: changing an array element in the method changing an array element in the method
changes the originalchanges the original
An array element can be passed to a method as well. ThenAn array element can be passed to a method as well. Then it will follow the parameter passing rules of it will follow the parameter passing rules of
that element's typethat element's type
CSC-101
More on Arrays of ObjectsMore on Arrays of Objects
The elements of an array can be object referencesThe elements of an array can be object references
The following declaration reserves space to store 25 The following declaration reserves space to store 25 references to references to StringString objects objects
String[] words = new String[25];String[] words = new String[25];
It does NOT create the It does NOT create the StringString objects themselves objects themselves Each object stored in an array must be instantiated separately. Each object stored in an array must be instantiated separately. Until then, recall that the cell contains a null reference.Until then, recall that the cell contains a null reference.
See See GradeRangeGradeRange.java.java (page 280) (page 280)
CSC-101
Arrays of ObjectsArrays of Objects
Objects can have arrays as instance variablesObjects can have arrays as instance variables
Therefore, fairly complex structures can be created simply Therefore, fairly complex structures can be created simply with arrays and objectswith arrays and objects
The software designer must carefully determine an The software designer must carefully determine an organization of data and objects that makes sense for the organization of data and objects that makes sense for the situationsituation
See See Tunes.java Tunes.java (page 282)(page 282) See See CDCollection.javaCDCollection.java (page 284) (page 284) See See CD.javaCD.java (page 286) (page 286)
CSC-101
Two-Dimensional ArraysTwo-Dimensional Arrays
A A one-dimensional arrayone-dimensional array stores a simple list of values stores a simple list of values
A A two-dimensional arraytwo-dimensional array can be thought of as a table of can be thought of as a table of values, with rows and columnsvalues, with rows and columns
A two-dimensional array element is referenced using two A two-dimensional array element is referenced using two index valuesindex values
To be precise, a two-dimensional array in Java is an array To be precise, a two-dimensional array in Java is an array of arraysof arrays
See See TwoDArray.javaTwoDArray.java (page 299) (page 299)
CSC-101
Multidimensional ArraysMultidimensional Arrays
An array can have as many dimensions as needed, creating An array can have as many dimensions as needed, creating a multidimensional arraya multidimensional array
Each dimension subdivides the previous one into the Each dimension subdivides the previous one into the specified number of elementsspecified number of elements
Each array dimension has its own Each array dimension has its own lengthlength constant constant
Because each dimension is an array of array references, the Because each dimension is an array of array references, the arrays within one dimension could be of different lengthsarrays within one dimension could be of different lengths