chapter 6: arrays and vectors presentation slides for java software solutions foundations of program...

31
Chapter 6: Arrays and Chapter 6: Arrays and Vectors Vectors Presentation slides for Presentation slides for Java Software Solutions Java Software Solutions Foundations of Program Design Foundations of Program Design Second Edition Second Edition by John Lewis and William Loftus by John Lewis and William Loftus Java Software Solutions is published by Addison-Wesley Java 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.

Post on 19-Dec-2015

224 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Chapter 6: Arrays and Vectors Presentation slides for Java Software Solutions Foundations of Program Design Second Edition by John Lewis and William Loftus

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.

Page 2: Chapter 6: Arrays and Vectors Presentation slides for Java Software Solutions Foundations of Program Design Second Edition by John Lewis and William Loftus

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

Page 3: Chapter 6: Arrays and Vectors Presentation slides for Java Software Solutions Foundations of Program Design Second Edition by John Lewis and William Loftus

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

Page 4: Chapter 6: Arrays and Vectors Presentation slides for Java Software Solutions Foundations of Program Design Second Edition by John Lewis and William Loftus

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

Page 5: Chapter 6: Arrays and Vectors Presentation slides for Java Software Solutions Foundations of Program Design Second Edition by John Lewis and William Loftus

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

Page 6: Chapter 6: Arrays and Vectors Presentation slides for Java Software Solutions Foundations of Program Design Second Edition by John Lewis and William Loftus

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)

Page 7: Chapter 6: Arrays and Vectors Presentation slides for Java Software Solutions Foundations of Program Design Second Edition by John Lewis and William Loftus

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];

Page 8: Chapter 6: Arrays and Vectors Presentation slides for Java Software Solutions Foundations of Program Design Second Edition by John Lewis and William Loftus

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

Page 9: Chapter 6: Arrays and Vectors Presentation slides for Java Software Solutions Foundations of Program Design Second Edition by John Lewis and William Loftus

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

Page 10: Chapter 6: Arrays and Vectors Presentation slides for Java Software Solutions Foundations of Program Design Second Edition by John Lewis and William Loftus

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)

Page 11: Chapter 6: Arrays and Vectors Presentation slides for Java Software Solutions Foundations of Program Design Second Edition by John Lewis and William Loftus

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

Page 12: Chapter 6: Arrays and Vectors Presentation slides for Java Software Solutions Foundations of Program Design Second Edition by John Lewis and William Loftus

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'};

Page 13: Chapter 6: Arrays and Vectors Presentation slides for Java Software Solutions Foundations of Program Design Second Edition by John Lewis and William Loftus

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)

Page 14: Chapter 6: Arrays and Vectors Presentation slides for Java Software Solutions Foundations of Program Design Second Edition by John Lewis and William Loftus

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

Page 15: Chapter 6: Arrays and Vectors Presentation slides for Java Software Solutions Foundations of Program Design Second Edition by John Lewis and William Loftus

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)

Page 16: Chapter 6: Arrays and Vectors Presentation slides for Java Software Solutions Foundations of Program Design Second Edition by John Lewis and William Loftus

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)

Page 17: Chapter 6: Arrays and Vectors Presentation slides for Java Software Solutions Foundations of Program Design Second Edition by John Lewis and William Loftus

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)

Page 18: Chapter 6: Arrays and Vectors Presentation slides for Java Software Solutions Foundations of Program Design Second Edition by John Lewis and William Loftus

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

Page 19: Chapter 6: Arrays and Vectors Presentation slides for Java Software Solutions Foundations of Program Design Second Edition by John Lewis and William Loftus

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

Page 20: Chapter 6: Arrays and Vectors Presentation slides for Java Software Solutions Foundations of Program Design Second Edition by John Lewis and William Loftus

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

Page 21: Chapter 6: Arrays and Vectors Presentation slides for Java Software Solutions Foundations of Program Design Second Edition by John Lewis and William Loftus

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

Page 22: Chapter 6: Arrays and Vectors Presentation slides for Java Software Solutions Foundations of Program Design Second Edition by John Lewis and William Loftus

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

Page 23: Chapter 6: Arrays and Vectors Presentation slides for Java Software Solutions Foundations of Program Design Second Edition by John Lewis and William Loftus

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)

Page 24: Chapter 6: Arrays and Vectors Presentation slides for Java Software Solutions Foundations of Program Design Second Edition by John Lewis and William Loftus

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

Page 25: Chapter 6: Arrays and Vectors Presentation slides for Java Software Solutions Foundations of Program Design Second Edition by John Lewis and William Loftus

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)

Page 26: Chapter 6: Arrays and Vectors Presentation slides for Java Software Solutions Foundations of Program Design Second Edition by John Lewis and William Loftus

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

Page 27: Chapter 6: Arrays and Vectors Presentation slides for Java Software Solutions Foundations of Program Design Second Edition by John Lewis and William Loftus

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)

Page 28: Chapter 6: Arrays and Vectors Presentation slides for Java Software Solutions Foundations of Program Design Second Edition by John Lewis and William Loftus

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

Page 29: Chapter 6: Arrays and Vectors Presentation slides for Java Software Solutions Foundations of Program Design Second Edition by John Lewis and William Loftus

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

Page 30: Chapter 6: Arrays and Vectors Presentation slides for Java Software Solutions Foundations of Program Design Second Edition by John Lewis and William Loftus

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

Page 31: Chapter 6: Arrays and Vectors Presentation slides for Java Software Solutions Foundations of Program Design Second Edition by John Lewis and William Loftus

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)