21
CS 2430 Day 26

CS 2430 Day 26. Announcements Exam #2: Wednesday, April 3 –Review in lab on Tuesday, April 2 –Sample problems sent via email

Embed Size (px)

Citation preview

Page 1: CS 2430 Day 26. Announcements Exam #2: Wednesday, April 3 –Review in lab on Tuesday, April 2 –Sample problems sent via email

CS 2430

Day 26

Page 2: CS 2430 Day 26. Announcements Exam #2: Wednesday, April 3 –Review in lab on Tuesday, April 2 –Sample problems sent via email

Announcements

• Exam #2: Wednesday, April 3– Review in lab on Tuesday, April 2– Sample problems sent via email

Page 3: CS 2430 Day 26. Announcements Exam #2: Wednesday, April 3 –Review in lab on Tuesday, April 2 –Sample problems sent via email

Agenda

• Generic Queue

Page 4: CS 2430 Day 26. Announcements Exam #2: Wednesday, April 3 –Review in lab on Tuesday, April 2 –Sample problems sent via email

Generic types

Page 5: CS 2430 Day 26. Announcements Exam #2: Wednesday, April 3 –Review in lab on Tuesday, April 2 –Sample problems sent via email

How to make a generic container class in Java?

Page 6: CS 2430 Day 26. Announcements Exam #2: Wednesday, April 3 –Review in lab on Tuesday, April 2 –Sample problems sent via email

First try

• Make a different class to hold each type of Object

• We would have BagOfDate, BagOfString, etc.

• Problem?

Too much similarity!

• Why write all that code?

Page 7: CS 2430 Day 26. Announcements Exam #2: Wednesday, April 3 –Review in lab on Tuesday, April 2 –Sample problems sent via email

Second try

• Make containers backed by array of Object• Can hold any type of Object• Problem?

Casting required to “get” items

• Example:

Rational rat = (Rational)operands.pop();

• Awkward: Container could hold Rationals, Strings, Dates, etc.

Page 8: CS 2430 Day 26. Announcements Exam #2: Wednesday, April 3 –Review in lab on Tuesday, April 2 –Sample problems sent via email

Java generics

• Can make a generic container class that is instantiated with a particular type (of Object)

• The “type” is a parameter to the class

• The “type” parameter MUST be a class, NOT a primitive type

Page 9: CS 2430 Day 26. Announcements Exam #2: Wednesday, April 3 –Review in lab on Tuesday, April 2 –Sample problems sent via email

public class Queue

{

private static final int DEFAULT_MAX = 10;

private Object[] items;

private int front, rear, count;

public Queue() { . . . }

public Queue(int inSize) { . . . }

public boolean isEmpty() { . . . }

public boolean isFull() { . . . }

public void enqueue(Object obj) { . . . }

public Object dequeue() { . . . }

}

Not generic!

Not generic Queue

Page 10: CS 2430 Day 26. Announcements Exam #2: Wednesday, April 3 –Review in lab on Tuesday, April 2 –Sample problems sent via email

public class Queue<E> // E must be a class, not a primitive

{

private static final int DEFAULT_MAX = 10;

private E[] items;

private int front, rear, count;

public Queue() { . . . }

public Queue(int inSize) { . . . }

public boolean isEmpty() { . . . }

public boolean isFull() { . . . }

public void enqueue(E obj) { . . . }

public E dequeue() { . . . }

}

Generic Queue

Page 11: CS 2430 Day 26. Announcements Exam #2: Wednesday, April 3 –Review in lab on Tuesday, April 2 –Sample problems sent via email

public class Queue<E> // E must be a class, not a primitive

{

private static final int DEFAULT_MAX = 10;

private E[] items;

private int front, rear, count;

public Queue() { . . . }

public Queue(int inSize) { . . . }

public boolean isEmpty() { . . . }

public boolean isFull() { . . . }

public void enqueue(E obj) { . . . }

public E dequeue() { . . . }

}

Same as before, but with Object replaced by E

Generic Queue

Page 12: CS 2430 Day 26. Announcements Exam #2: Wednesday, April 3 –Review in lab on Tuesday, April 2 –Sample problems sent via email

Implementation

Page 13: CS 2430 Day 26. Announcements Exam #2: Wednesday, April 3 –Review in lab on Tuesday, April 2 –Sample problems sent via email

Constructorpublic Queue()

{

items = ???

}

Page 14: CS 2430 Day 26. Announcements Exam #2: Wednesday, April 3 –Review in lab on Tuesday, April 2 –Sample problems sent via email

Does this work?public Queue()

{

items = new E[DEFAULT_MAX];

}

Java doesn’t allow this!

We need to create an array of Object and cast it to (E[]).

Page 15: CS 2430 Day 26. Announcements Exam #2: Wednesday, April 3 –Review in lab on Tuesday, April 2 –Sample problems sent via email

Constructor fixed!public Queue()

{

items = (E[]) new Object[DEFAULT_MAX];

}

We might get a “warning” from the compiler.

We’ll just live with it.

Page 16: CS 2430 Day 26. Announcements Exam #2: Wednesday, April 3 –Review in lab on Tuesday, April 2 –Sample problems sent via email

Constructorspublic Queue()

{

items = (E[]) new Object[DEFAULT_MAX];

}

public Queue(int inSize)

{

if (inSize < 0)

items = (E[]) new Object[DEFAULT_MAX];

else

items = (E[]) new Object[inSize];

}

Page 17: CS 2430 Day 26. Announcements Exam #2: Wednesday, April 3 –Review in lab on Tuesday, April 2 –Sample problems sent via email

The rest is the same, but just replace Object with E

Page 18: CS 2430 Day 26. Announcements Exam #2: Wednesday, April 3 –Review in lab on Tuesday, April 2 –Sample problems sent via email

Client codeQueue<Date> dq = new Queue<Date>(365);

Queue<Rational> rq = new Queue<Rational>(40);

Date date = dq.dequeue(); // no cast

Rational rat = rq.dequeue();

rq.enqueue(new Rational(1, 2)); // same as before

Page 19: CS 2430 Day 26. Announcements Exam #2: Wednesday, April 3 –Review in lab on Tuesday, April 2 –Sample problems sent via email

Can also do thisQueue<Date> dq = new Queue(365);

Queue<Rational> rq = new Queue(40);

Date date = dq.dequeue(); // no cast

Rational rat = rq.dequeue();

rq.enqueue(new Rational(1, 2)); // same as before

Page 20: CS 2430 Day 26. Announcements Exam #2: Wednesday, April 3 –Review in lab on Tuesday, April 2 –Sample problems sent via email

Can’t do this!Queue<Date> dq = new Queue(365);

Queue<Rational> rq = new Queue(40);

Date date = dq.dequeue();

Rational rat = rq.dequeue();

rq.enqueue(new Rational(1, 2));

dq.enqueue(rat); // this is a syntax error!

Page 21: CS 2430 Day 26. Announcements Exam #2: Wednesday, April 3 –Review in lab on Tuesday, April 2 –Sample problems sent via email

Or this!Queue<Date> dq = new Queue(365);

Queue<Rational> rq = new Queue(40);

Date date = dq.dequeue();

Rational rat = rq.dequeue();

rq.enqueue(new Rational(1, 2));

rat = dq.dequeue(); // this is a syntax error!