Chapter 6: Arrays and Vectors Chapter 6: Arrays and Vectors
Presentation slides forPresentation slides for
Java Software SolutionsJava Software SolutionsFoundations of Program DesignFoundations of Program Design
Second EditionSecond Edition
by John Lewis and William Loftusby John Lewis and William Loftus
Java Software Solutions is published by Addison-WesleyJava Software Solutions is published by Addison-Wesley
Presentation slides are copyright 2000 by John Lewis and William Loftus. All rights reserved.Presentation slides are copyright 2000 by John Lewis and William Loftus. All rights reserved.
Instructors using the textbook may use and modify these slides for pedagogical purposes.Instructors using the textbook may use and modify these slides for pedagogical purposes.
2
Arrays and VectorsArrays and Vectors
Arrays and vectors are objects that help us organize large Arrays and vectors are objects that help us organize large amounts of informationamounts of information
Chapter 6 focuses on:Chapter 6 focuses on:• array declaration and usearray declaration and use
• arrays of objectsarrays of objects
• sorting elements in an arraysorting elements in an array
• multidimensional arraysmultidimensional arrays
• the the VectorVector class class
• using arrays to manage graphicsusing arrays to manage graphics
3
ArraysArrays
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
4
ArraysArrays
A particular value in an array is referenced using the array A particular value in an array is referenced using the array name followed by the index in bracketsname followed by the index in 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 canand can be used wherever an integer variable can
For example, it can be assigned a value, printed, or used in For example, it can be assigned a value, printed, or used in a calculationa calculation
5
ArraysArrays
An array stores multiple values of the same typeAn array stores multiple values of the same type
That type can be primitive types or objectsThat type can be primitive types or objects
Therefore, we can create an array of integers, or an array Therefore, we can create an array of integers, or an array of characters, or an array of String objects, etc.of characters, or an array of String objects, etc.
In Java, the array itself is an objectIn Java, the array itself is an object
Therefore the name of the array is a object reference Therefore the name of the array is a object reference variable, and the array itself is instantiated separatelyvariable, and the array itself is instantiated separately
6
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];
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
The type of the variable The type of the variable scoresscores is is int[]int[] (an array of (an array of integers)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
See See BasicArrayBasicArray.java.java (page 270)(page 270)
7
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];
8
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 a valid An index used in an array reference must specify a valid elementelement
That is, the index value must be in bounds (0 to N-1)That is, the index value must be in bounds (0 to N-1)
The Java interpreter will throw an exception if an array The Java interpreter will throw an exception if an array index is out of bounds index is out of bounds
This is called automatic This is called automatic bounds checkingbounds checking
Bounds CheckingBounds Checking
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::
System.out.println (codes[count]);System.out.println (codes[count]);
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
10
Bounds CheckingBounds Checking
Each array object has a public constant called Each array object has a public constant called lengthlength that that stores the size of the arraystores the size of the array
It is referenced using the array name (just like any other It is referenced using the array name (just like any other object):object):
scores.lengthscores.length
Note that Note that lengthlength holds the number of elements, not the holds the number of elements, not the largest indexlargest index
See See ReverseNumbersReverseNumbers.java.java (page 272)(page 272) See See LetterCountLetterCount.java.java (page 274)(page 274)
11
Array Declarations RevisitedArray Declarations Revisited
The brackets of the array type can be associated with the The brackets of the array type can be associated with the element type or with the name of the arrayelement type or with the name of the array
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 readableThe first format is generally more readable
12
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,
269, 97, 114, 298, 476};269, 97, 114, 298, 476};
char[] letterGrades = {'A', 'B', 'C', 'D', 'F'};char[] letterGrades = {'A', 'B', 'C', 'D', 'F'};
13
Initializer ListsInitializer Lists
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
• no size value is specifiedno size value is specified
The size of the array is determined by the number of items The size of the array is determined by the number of items in the initializer listin the initializer list
An initializer list can only be used in the declaration of an An initializer list can only be used in the declaration of an arrayarray
SeeSee Primes.javaPrimes.java (page 278)(page 278)
14
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 the formal and actual parameters aliases of each making the formal and actual parameters aliases of each otherother
Changing an array element in the method changes the Changing an array element in the method changes the originaloriginal
An array element can be passed to a method as well, and An array element can be passed to a method as well, and will follow the parameter passing rules of that element's will follow the parameter passing rules of that element's typetype
15
Arrays of ObjectsArrays 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 Each object stored in an array must be instantiated separatelyseparately
See See GradeRangeGradeRange.java.java (page 280) (page 280)
Command-Line ArgumentsCommand-Line Arguments
The signature of the The signature of the mainmain method indicates that it takes an method indicates that it takes an array of array of StringString objects as a parameter objects as a parameter
These values come from command-line arguments that are These values come from command-line arguments that are provided when the interpreter is invokedprovided when the interpreter is invoked
For example, the following invocation of the interpreter For example, the following invocation of the interpreter passes an array of three passes an array of three StringString objects into main: objects into main:
> java DoIt pennsylvania texas california> java DoIt pennsylvania texas california
These strings are stored at indexes 0-2 of the parameterThese strings are stored at indexes 0-2 of the parameter
See See NameTagNameTag.java.java (page 281) (page 281)
17
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.javaTunes.java (page 282)(page 282) See See CDCollectionCDCollection.java.java (page 284) (page 284) See See CD.javaCD.java (page 286) (page 286)
18
SortingSorting
Sorting is the process of arranging a list of items into a Sorting is the process of arranging a list of items into a particular orderparticular order
There must be some value on which the order is basedThere must be some value on which the order is based
There are many algorithms for sorting a list of itemsThere are many algorithms for sorting a list of items
These algorithms vary in efficiencyThese algorithms vary in efficiency
We will examine two specific algorithms: We will examine two specific algorithms: • Selection SortSelection Sort
• Insertion SortInsertion Sort
19
Selection SortSelection Sort
The approach of Selection Sort:The approach of Selection Sort:• select one value and put it in its final place in the sort listselect one value and put it in its final place in the sort list
• repeat for all other valuesrepeat for all other values
In more detail:In more detail:• find the smallest value in the listfind the smallest value in the list
• switch it with the value in the first positionswitch it with the value in the first position
• find the next smallest value in the listfind the next smallest value in the list
• switch it with the value in the second positionswitch it with the value in the second position
• repeat until all values are placedrepeat until all values are placed
20
Selection SortSelection Sort
An example:An example:
original: 3 9 6 1 2original: 3 9 6 1 2
smallest is 1: 1 9 6 3 2smallest is 1: 1 9 6 3 2
smallest is 2: 1 2 6 3 9smallest is 2: 1 2 6 3 9
smallest is 3: 1 2 3 6 9smallest is 3: 1 2 3 6 9
smallest is 6: 1 2 3 6 9smallest is 6: 1 2 3 6 9
See See SortGrades.java SortGrades.java (page 289)(page 289) See See Sorts.javaSorts.java (page 290) -- the (page 290) -- the selectionSortselectionSort
methodmethod
21
Insertion SortInsertion Sort
The approach of Insertion Sort:The approach of Insertion Sort:• Pick any item and insert it into its proper place in a sorted sublistPick any item and insert it into its proper place in a sorted sublist
• repeat until all items have been insertedrepeat until all items have been inserted
In more detail:In more detail:• consider the first item to be a sorted sublist (of one item)consider the first item to be a sorted sublist (of one item)
• insert the second item into the sorted sublist, shifting items as insert the second item into the sorted sublist, shifting items as necessary to make room to insert the new additionnecessary to make room to insert the new addition
• insert the third item into the sorted sublist (of two items), shifting insert the third item into the sorted sublist (of two items), shifting as necessaryas necessary
• repeat until all values are inserted into their proper positionrepeat until all values are inserted into their proper position
22
Insertion SortInsertion Sort
An example:An example:
original: 3 9 6 1 2original: 3 9 6 1 2
insert 9: 3 9 6 1 2insert 9: 3 9 6 1 2
insert 6: 3 6 9 1 2insert 6: 3 6 9 1 2
insert 1: 1 3 6 9 2insert 1: 1 3 6 9 2
insert 2: 1 2 3 6 9insert 2: 1 2 3 6 9
See See Sorts.javaSorts.java (page 290) -- the (page 290) -- the insertionSortinsertionSort methodmethod
23
Sorting ObjectsSorting Objects
Integers have an inherent order, but the order of a set of Integers have an inherent order, but the order of a set of objects must be defined by the person defining the classobjects must be defined by the person defining the class
Recall that a Java interface can be used as a type name and Recall that a Java interface can be used as a type name and guarantees that a particular class has implemented guarantees that a particular class has implemented particular methodsparticular methods
We can use the We can use the ComparableComparable interface to develop a generic interface to develop a generic sort for a set of objectssort for a set of objects
See See SortPhoneList.java (page 294)SortPhoneList.java (page 294) See See Contact.javaContact.java (page 295) (page 295) See See Sorts.javaSorts.java (page 290) (page 290)
24
Comparing SortsComparing Sorts
Both Selection and Insertion sorts are similar in efficiencyBoth Selection and Insertion sorts are similar in efficiency
The both have outer loops that scan all elements, and inner The both have outer loops that scan all elements, and inner loops that compare the value of the outer loop with almost loops that compare the value of the outer loop with almost all values in the listall values in the list
Therefore approximately nTherefore approximately n22 number of comparisons are number of comparisons are made to sort a list of size nmade to sort a list of size n
We therefore say that these sorts are of We therefore say that these sorts are of order norder n22
Other sorts are more efficient: Other sorts are more efficient: order n logorder n log22 n n
25
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)
26
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
27
The The VectorVector Class Class
An object of class An object of class VectorVector is similar to an array in that it is similar to an array in that it stores multiple valuesstores multiple values
However, a vectorHowever, a vector• only stores objectsonly stores objects• does not have the indexing syntax that arrays havedoes not have the indexing syntax that arrays have
The methods of the The methods of the VectorVector class are used to interact with class are used to interact with the elements of a vectorthe elements of a vector
The The VectorVector class is part of the class is part of the java.utiljava.util package package
See See Beatles.javaBeatles.java (page 304) (page 304)
28
The The VectorVector Class Class
An important difference between an array and a vector is An important difference between an array and a vector is that a vector can be thought of as a dynamic, able to change that a vector can be thought of as a dynamic, able to change its size as neededits size as needed
Each vector initially has a certain amount of memory space Each vector initially has a certain amount of memory space reserved for storing elementsreserved for storing elements
If an element is added that doesn't fit in the existing space, If an element is added that doesn't fit in the existing space, more room is automatically acquiredmore room is automatically acquired
29
The Vector ClassThe Vector Class
The The VectorVector class is implemented using an array class is implemented using an array
Whenever new space is required, a new, larger array is Whenever new space is required, a new, larger array is created, and the values are copied from the original to the created, and the values are copied from the original to the new arraynew array
To insert an element, existing elements are first copied, one To insert an element, existing elements are first copied, one by one, to another position in the arrayby one, to another position in the array
Therefore, the implementation of Therefore, the implementation of VectorVector in the API is not in the API is not very efficient for inserting elementsvery efficient for inserting elements
Polygons and PolylinesPolygons and Polylines
Arrays are often helpful in graphics processingArrays are often helpful in graphics processing
Polygons and polylines are shapes that are defined by Polygons and polylines are shapes that are defined by values stored in arraysvalues stored in arrays
A polyline is similar to a polygon except that its endpoints A polyline is similar to a polygon except that its endpoints do not meet, and it cannot be filleddo not meet, and it cannot be filled
See See Rocket.javaRocket.java (page 307) (page 307)
There is also a separate There is also a separate PolygonPolygon class that can be used to class that can be used to define and draw a polygondefine and draw a polygon
Saving Drawing StateSaving Drawing State
Each time the Each time the repaintrepaint method is called on an applet, the method is called on an applet, the window is cleared prior to calling window is cleared prior to calling paintpaint
An array or vector can be used to store the objects drawn, An array or vector can be used to store the objects drawn, and redraw them as necessaryand redraw them as necessary
See See Dots2.javaDots2.java (page 310) (page 310)