cs 2430 day 12. agenda for today container class example: datelist growable container classes

25
CS 2430 Day 12

Upload: dora-powers

Post on 18-Jan-2016

216 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: CS 2430 Day 12. Agenda for today Container class example: DateList Growable container classes

CS 2430

Day 12

Page 2: CS 2430 Day 12. Agenda for today Container class example: DateList Growable container classes

Agenda for today

• Container class example: DateList• Growable container classes

Page 3: CS 2430 Day 12. Agenda for today Container class example: DateList Growable container classes

List of Dates ADT

Data:• Default maximum size

(constant)• Array of Dates• Current number of Dates in container

Operations:• Add a date• Remove a date• Size• Contains a date?• Item at (ordered list)

Page 4: CS 2430 Day 12. Agenda for today Container class example: DateList Growable container classes

Class DateList

Page 5: CS 2430 Day 12. Agenda for today Container class example: DateList Growable container classes

public class DateList{ public static final int DEFAULT_NUM = 10; private Date[] dates; private int size;

public DateList() { . . . }

public DateList(int inSize) { . . . }

public int size() { . . . }

public boolean add(Date inDate) { . . . }

public boolean remove(Date inDate) { . . . }

public boolean contains(Date inDate) { . . . }

public Date itemAt(int index) { . . . } // is DateList ordered? . . . // we can add other methods later}

Page 6: CS 2430 Day 12. Agenda for today Container class example: DateList Growable container classes

Implementation of class DateList

Page 7: CS 2430 Day 12. Agenda for today Container class example: DateList Growable container classes

Constructors

Page 8: CS 2430 Day 12. Agenda for today Container class example: DateList Growable container classes

public class DateList{ public static final int DEFAULT_NUM = 10; private Date[] dates; private int size;

public DateList() { dates = new Date[DEFAULT_NUM]; size = 0; }

public DateList(int inSize) { if (inSize < 0) dates = new Date[DEFAULT_NUM]; else dates = new Date[inSize]; size = 0; } . . .}

Page 9: CS 2430 Day 12. Agenda for today Container class example: DateList Growable container classes

public class DateList{ . . .

public boolean add(Date inDate) { if (size >= dates.length) // can't use DEFAULT_NUM -- WHY? return false; dates[size++] = inDate; return true; } . . .}

Implementing add()

Page 10: CS 2430 Day 12. Agenda for today Container class example: DateList Growable container classes

public class DateList{ . . .

private int find(Date inDate) { for (int i = 0; i < size; i++) if (dates[i].equals(inDate)) return i; return -1; } . . .}

Implementing find()

Page 11: CS 2430 Day 12. Agenda for today Container class example: DateList Growable container classes

public class DateList{ . . .

private int find(Date inDate) { . . . }

public boolean remove(Date inDate) // if DateList is ordered { int index = find(inDate); if (index < 0) return false; for (int i = index; i < size – 1; i++) dates[i] = dates[i + 1]; size--; return true; } . . .}

Implementing remove()

Page 12: CS 2430 Day 12. Agenda for today Container class example: DateList Growable container classes

public class DateList{ . . .

private int find(Date inDate) { . . . }

public boolean contains(Date inDate) { return find(inDate) >= 0; } . . .}

Implementing contains()

Page 13: CS 2430 Day 12. Agenda for today Container class example: DateList Growable container classes

public class DateList{ . . .

public Date itemAt(int index) // only if DateList is ordered { if (index < 0 || index >= size) return null; return dates[index]; } . . .}

Implementing itemAt()

Page 14: CS 2430 Day 12. Agenda for today Container class example: DateList Growable container classes

Any questions?

Page 15: CS 2430 Day 12. Agenda for today Container class example: DateList Growable container classes

What happens when we run out of room in the

DateList?

Page 16: CS 2430 Day 12. Agenda for today Container class example: DateList Growable container classes

It should be a “growable” DateList!

Page 17: CS 2430 Day 12. Agenda for today Container class example: DateList Growable container classes

public class DateList{ public static final int DEFAULT_NUM = 10; private Date[] dates; private int size;

public DateList() { . . . }

public DateList(int inSize) { . . . }

public int size() { . . . }

public boolean add(Date inDate) { . . . }

public boolean remove(Date inDate) { . . . }

public boolean contains(Date inDate) { . . . }

public Date itemAt(int index) { . . . } . . .

}

Page 18: CS 2430 Day 12. Agenda for today Container class example: DateList Growable container classes

public class GrowableDateList{ public static final int GROWBY = 10; // change constructors! private Date[] dates; private int size;

public GrowableDateList() { . . . }

public GrowableDateList(int inSize) { . . . }

public int size() { . . . }

public boolean add(Date inDate) { . . . }

public boolean remove(Date inDate) { . . . }

public boolean contains(Date inDate) { . . . }

public Date itemAt(int index) { . . . } private void grow() { . . . } . . .

}

Page 19: CS 2430 Day 12. Agenda for today Container class example: DateList Growable container classes

New method: grow()private void grow()

{

// how to increase size of array dates?

Date temp[] = new Date[size + GROWBY];

for (int i = 0; i < size; i++)

temp[i] = dates[i];

// don't forget:

dates = temp;

}

Page 20: CS 2430 Day 12. Agenda for today Container class example: DateList Growable container classes

Cannot growpublic boolean add(Date inDate)

{

if (size >= dates.length)

return false;

dates[size++] = inDate;

return true;

}

Before

Page 21: CS 2430 Day 12. Agenda for today Container class example: DateList Growable container classes

add() uses grow()public boolean add(Date inDate)

{

if (size >= dates.length)

return false;

dates[size++] = inDate;

return true;

}

Before

public boolean add(Date inDate)

{

if (size >= dates.length)

grow();

dates[size++] = inDate;

return true;

}

Now!

Page 22: CS 2430 Day 12. Agenda for today Container class example: DateList Growable container classes

Watching arrays grow()private void grow()

{

// how to increase size of array dates?

Date temp[] = new Date[size + GROWBY];

for (int i = 0; i < dates.length; i++)

temp[i] = dates[i];

// don't forget:

dates = temp;

}

1/2/93 7/8/99 2/4/96

dates

i

1/2/931/2/93

3/4/95

3/4/953/4/95 7/8/997/8/99

1/3/95

1/3/951/3/95

2/4/96

2/4/962/4/96

Page 23: CS 2430 Day 12. Agenda for today Container class example: DateList Growable container classes

When does add() return false?

Page 24: CS 2430 Day 12. Agenda for today Container class example: DateList Growable container classes

Never!

Page 25: CS 2430 Day 12. Agenda for today Container class example: DateList Growable container classes

Any questions?