Post on 26-Mar-2015
Chapter 11Lists and iteration
This chapter discusses Managing collections of objects. The fundamental container object is
called a list. Fundamental properties of lists. Specifications for a typical List class. How to perform an iterative process with
a list. The “while” statement and “for loop.”
Lists A list is a container that holds a finite
sequence of values all of the same type. List properties:
A list is finite, with zero or more elements. A list is a sequence. A list is homogeneous.
container: an object whose purpose is to contain other objects.
list: a container in which the elements are kept in sequence.
List specificationpublic class StudentList
A finite list of Students.
public StudentList ()
Create an empty StudentList.
public int size ()
Number of elements in List.
ensure:
this.size() >= 0
public boolean isEmpty ()
List contains no elements.
this.isEmpty()==(this.size()==0)
List specification (cont.)(a) StudentList sl; //initially
//null
(b) sl = new StudentList();
//Empty List
List specification (cont.)public Student get(int i)
The element at the specified position.
require:0<=i && i<this.size()
public void append (Student s)
Append the specified Student to the end of this List.
require:
s!=null
ensure:
this.size()==old.size+1
this.get(this.size()-1) == s Anything not mentioned does not change!
List specification (cont.)public void remove(int i)
Remove the element at the specified position.
require:
0<=i && i<this.size()
ensure:
this.size()==old.size-1
for i <= j < this.size()
this.get(j) == old.get(j+1)
public void set (int i, Student s)
Replace the element at the specified position with the specified Student.
require:
0 <= i && i < this.size()
s != null
ensure:
this.get(i) == s
List specification (cont.) Our specifications are fairly ubiquitous.
Just substitute the class name Student with another class. Change any reference to an Student object with a reference to an object of another class.
public NewObject get (int i)
…
public void append (NewObject n)
…
public void set (int i, NewObject n)
…
while statement iteration: a process in which an
operation is performed several times.
Syntax:while ( condition )
statement
while statement (cont.) The component statement is called
the body. Executing the body should have the
potential of changing the value of the condition.
It is possible that the condition of a “while” statement will remain true no matter now many time the body is executed. This is an “infinite loop.”
while loops and lists.
while( more list elements to process )process the next element
e.g.int index;index = 0;while (index < list.size()) {
process list.get(index);index = index + 1;
} We must guarantee that the while
condition eventually will become false.
while example - summing items of a Listpublic double finalAverage(StudentList students)
The average (mean) of the final exam grades of the specified Students.require: students.size() > 0
public int finalExam ()This Student’s grade on the final exam.
public double finalAverage(StudentList students) {
int i, sum, count;count = students.size();sum = 0;i = 0;while ( i < count) {
sum = sum + students.get(i).finalExam();i = i+1;
}return (double)sum / (double)count;
}
while example (cont.)
...
Summing selected elements of a List Consider what to do if some
students did not take the final exam.
Finding the minimum/** * The lowest final exam grades of the * specified Students. * require: * students.size() > 0 */public int minFinalExam (StudentList
students){ int i; int low; low = students.get(0).finalExam(); i=1; while ( i < students.size()){ if (students.get(i).finalExam()<low) low=students.get(i).finalExam(); i = i+1; }}
Determining if an object is in a Listpublic boolean contains (StudentList s) { int i; int length; length = this.size(); i=0; while ( i<length && get(i)!=s )
i = i+1; return i < length;}
What does “equal” mean? Two reference values are equal if
they refer to the same object.
What does “equal” mean? (cont.) Consider a Date class, that has
components day, month, and year. If distinct Date objects are created to
represent the same date, would these objects be “equal” ? Must they refer to the same object?
What does “equal” mean? (cont.) To determine if they are “equal” dates, we
must compare their day, month, and year.public boolean equals (Object obj){
Require.condition(obj
instanceof Date);
Date d = (Date)obj;
return this.year()==d.year() &&
this.month()==d.month() &&
this.day()==d.day();
}
// instanceof returns true if the object is
// an instance of
// the class
Two meanings of equality
indexOf method
public int indexOf (Student obj) {
int i;
int length;
length = this.size();
i = 0;
while (i < length && !obj.equals(get(i)))
i = i+1;
if ( i < length)
return i;
else
return -1;// item not found
}
Removing duplicatespublic void removeDuplicates(StudentList l) {
int i; //indexStudent item; //Check for duplicatesint j; //index
//invariant: i < ji = 0;while (i < list.size()) { item = list.get(i); j = i + 1;
while (j < list.size()) if (item.equals(list.get(j)))
list.remove(j); else
j = j+1;i = i+1;
}}
Loop structure
initializationwhile (condition) {body
}conclusion
for statement
for ( initialization; condition; updateStatement )
statement
for statement example
int i;
for ( i = 0; i < list.size(); i = i+1)
process list.get(i);
We’ve covered
How to use a List. summing elements. finding an element. removing elements.
while loops. Equality. The instanceof operator. for statements.
Glossary
Glosssary (cont.)