• No results found

Chapter 6: Arrays and Vectors Chapter 6: Arrays and Vectors

N/A
N/A
Protected

Academic year: 2021

Share "Chapter 6: Arrays and Vectors Chapter 6: Arrays and Vectors"

Copied!
31
0
0

Loading.... (view fulltext now)

Full text

(1)

Chapter 6: Arrays and Vectors Chapter 6: Arrays and 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.

(2)

Arrays and Vectors Arrays and Vectors

Arrays and vectors are objects that help us organize large Arrays and vectors are objects that help us organize large amounts of information

amounts of information

Chapter 6 focuses on: Chapter 6 focuses on:

array declaration and use array declaration and use

arrays of objects arrays of objects

sorting elements in an array sorting elements in an array

multidimensional arrays multidimensional arrays

the the Vector Vector class class

using arrays to manage graphics using arrays to manage graphics

(3)

3

Arrays Arrays

An An array array 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-1 An array of size N is indexed from zero to N-1 scores

The entire array The entire array has a single name

has a single name Each value has a numeric Each value has a numeric index index

This array holds 10 values that are indexed from 0 to 9

This array holds 10 values that are indexed from 0 to 9

(4)

Arrays Arrays

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 brackets

name followed by the index in brackets

For example, the expression For 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

and 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 calculation

a calculation

(5)

5

Arrays Arrays

An array stores multiple values of the same type An array stores multiple values of the same type

That type can be primitive types or objects That 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 object In 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 separately

variable, and the array itself is instantiated separately

(6)

Declaring Arrays Declaring Arrays

The The scores scores 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 size

each object of that type has a specific size

The type of the variable The type of the variable scores scores is is int[] int[] (an array of (an array of integers)

integers)

It is set to a new array object that can hold 10 integers It is set to a new array object that can hold 10 integers

See See BasicArray BasicArray .java .java (page 270) (page 270)

(7)

7

Declaring Arrays Declaring 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 Checking Bounds Checking

Once an array is created, it has a fixed size Once 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 element

element

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 checking bounds checking

(9)

Bounds Checking Bounds Checking

For example, if the array For example, if the array codes can hold 100 values, it can codes can hold 100 values, it can only be indexed using the numbers 0 to 99

only be indexed using the numbers 0 to 99

If If count count has the value 100, then the following reference has the value 100, then the following reference will cause an

will cause an ArrayOutOfBoundsException ArrayOutOfBoundsException : :

System.out.println (codes[count]);

System.out.println (codes[count]);

It’s common to introduce It’s common to introduce off-by-one errors off-by-one errors when using when using arrays

arrays

for (int index=0; index <= 100; index++) codes[index] = index*50 + epsilon;

problem

(10)

Bounds Checking Bounds Checking

Each array object has a public constant called Each array object has a public constant called length that length that stores the size of the array

stores 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.length scores.length

Note that Note that length length holds the number of elements, not the holds the number of elements, not the largest index

largest index

See See ReverseNumbers ReverseNumbers .java .java (page 272) (page 272)

See See LetterCount LetterCount .java .java (page 274) (page 274)

(11)

11

Array Declarations Revisited Array 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 array

element 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 readable The first format is generally more readable

(12)

Initializer Lists Initializer Lists

An An initializer list initializer list can be used to instantiate and initialize an can be used to instantiate and initialize an array in one step

array in one step

The values are delimited by braces and separated by The values are delimited by braces and separated by commas

commas

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)

13

Initializer Lists Initializer Lists

Note that when an initializer list is used: Note that when an initializer list is used:

the the new new operator is not used operator is not used

no size value is specified no 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 list

in 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 array

array

See See Primes.java Primes.java (page 278) (page 278)

(14)

Arrays as Parameters Arrays as Parameters

An entire array can be passed to a method as a parameter An 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

other other

Changing an array element in the method changes the Changing an array element in the method changes the original

original

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

type type

(15)

15

Arrays of Objects Arrays of Objects

The elements of an array can be object references The 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 String objects String objects

String[] words = new String[25]; String[] words = new String[25];

It does NOT create the It does NOT create the String objects themselves String objects themselves

Each object stored in an array must be instantiated Each object stored in an array must be instantiated separately

separately

See See GradeRange GradeRange .java .java (page 280) (page 280)

(16)

Command-Line Arguments Command-Line Arguments

The signature of the The signature of the main main method indicates that it takes an method indicates that it takes an array of

array of String String 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 invoked

provided 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 String String 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 parameter These strings are stored at indexes 0-2 of the parameter

See See NameTag NameTag .java .java (page 281) (page 281)

(17)

17

Arrays of Objects Arrays of Objects

Objects can have arrays as instance variables Objects 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 objects

with 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

situation situation

See See Tunes.java Tunes.java (page 282) (page 282)

See See CDCollection CDCollection .java .java (page 284) (page 284)

See See CD.java CD.java (page 286) (page 286)

(18)

Sorting Sorting

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 order

particular order

There must be some value on which the order is based There must be some value on which the order is based

There are many algorithms for sorting a list of items There are many algorithms for sorting a list of items

These algorithms vary in efficiency These algorithms vary in efficiency

We will examine two specific algorithms: We will examine two specific algorithms:

Selection Sort Selection Sort

Insertion Sort Insertion Sort

(19)

19

Selection Sort Selection Sort

The approach of Selection Sort: The approach of Selection Sort:

select one value and put it in its final place in the sort list select one value and put it in its final place in the sort list

repeat for all other values repeat for all other values

In more detail: In more detail:

find the smallest value in the list find the smallest value in the list

switch it with the value in the first position switch it with the value in the first position

find the next smallest value in the list find the next smallest value in the list

switch it with the value in the second position switch it with the value in the second position

repeat until all values are placed repeat until all values are placed

(20)

Selection Sort Selection Sort

An example: An example:

original: 3 9 6 1 2 original: 3 9 6 1 2 smallest is 1: 1 9 6 3 2 smallest is 1: 1 9 6 3 2 smallest is 2: 1 2 6 3 9 smallest is 2: 1 2 6 3 9 smallest is 3: 1 2 3 6 9 smallest is 3: 1 2 3 6 9 smallest is 6: 1 2 3 6 9 smallest is 6: 1 2 3 6 9

See See SortGrades.java SortGrades.java (page 289) (page 289)

See See Sorts.java Sorts.java (page 290) -- the (page 290) -- the selectionSort selectionSort method

method

(21)

21

Insertion Sort Insertion Sort

The approach of Insertion Sort: The approach of Insertion Sort:

Pick any item and insert it into its proper place in a sorted sublist Pick any item and insert it into its proper place in a sorted sublist

repeat until all items have been inserted repeat 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 addition

necessary 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 necessary

as necessary

repeat until all values are inserted into their proper position repeat until all values are inserted into their proper position

(22)

Insertion Sort Insertion Sort

An example: An example:

original: 3 9 6 1 2 original: 3 9 6 1 2 insert 9: 3 9 6 1 2 insert 9: 3 9 6 1 2 insert 6: 3 6 9 1 2 insert 6: 3 6 9 1 2 insert 1: 1 3 6 9 2 insert 1: 1 3 6 9 2 insert 2: 1 2 3 6 9 insert 2: 1 2 3 6 9

See See Sorts.java Sorts.java (page 290) -- the (page 290) -- the insertionSort insertionSort method

method

(23)

23

Sorting Objects Sorting 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 class objects 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 methods

particular methods

We can use the We can use the Comparable Comparable interface to develop a generic interface to develop a generic sort for a set of objects

sort for a set of objects

See See SortPhoneList.java (page 294) SortPhoneList.java (page 294)

See See Contact.java Contact.java (page 295) (page 295)

See See Sorts.java Sorts.java (page 290) (page 290)

(24)

Comparing Sorts Comparing Sorts

Both Selection and Insertion sorts are similar in efficiency Both 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 list all values in the list

Therefore approximately n Therefore approximately n

22

number of comparisons are number of comparisons are made to sort a list of size n

made to sort a list of size n

We therefore say that these sorts are of We therefore say that these sorts are of order n order n

22

Other sorts are more efficient: Other sorts are more efficient: order n log order n log

2

n n

(25)

25

Two-Dimensional Arrays Two-Dimensional Arrays

A A one-dimensional array one-dimensional array stores a simple list of values stores a simple list of values

A A two-dimensional array two-dimensional array can be thought of as a table of can be thought of as a table of values, with rows and columns

values, with rows and columns

A two-dimensional array element is referenced using two A two-dimensional array element is referenced using two index values

index 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 arrays

of arrays

See See TwoDArray.java TwoDArray.java (page 299) (page 299)

(26)

Multidimensional Arrays Multidimensional Arrays

An array can have as many dimensions as needed, creating An array can have as many dimensions as needed, creating a multidimensional array

a multidimensional array

Each dimension subdivides the previous one into the Each dimension subdivides the previous one into the specified number of elements

specified number of elements

Each array dimension has its own Each array dimension has its own length constant length 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 lengths

arrays within one dimension could be of different lengths

(27)

27

The The Vector Vector Class Class

An object of class An object of class Vector is similar to an array in that it Vector is similar to an array in that it stores multiple values

stores multiple values

However, a vector However, a vector

only stores objects only stores objects

does not have the indexing syntax that arrays have does not have the indexing syntax that arrays have

The methods of the The methods of the Vector Vector class are used to interact with class are used to interact with the elements of a vector

the elements of a vector

The The Vector Vector class is part of the class is part of the java.util java.util package package

See See Beatles.java Beatles.java (page 304) (page 304)

(28)

The The Vector Vector 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 needed its 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 elements

reserved 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 acquired

more room is automatically acquired

(29)

29

The Vector Class The Vector Class

The The Vector Vector 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 array new 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 array

by one, to another position in the array

Therefore, the implementation of Therefore, the implementation of Vector Vector in the API is not in the API is not very efficient for inserting elements

very efficient for inserting elements

(30)

Polygons and Polylines Polygons and Polylines

Arrays are often helpful in graphics processing Arrays 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 arrays

values 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 filled

do not meet, and it cannot be filled

See See Rocket.java (page 307) Rocket.java (page 307)

There is also a separate There is also a separate Polygon Polygon class that can be used to class that can be used to define and draw a polygon

define and draw a polygon

(31)

Saving Drawing State Saving Drawing State

Each time the Each time the repaint repaint 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 paint paint

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 necessary

and redraw them as necessary

See See Dots2.java Dots2.java (page 310) (page 310)

References

Related documents