import java.util.Arrays;
public class Queue <T>{
private T[] QueueArr;
private int front;
private int back;
private int size;
public Queue(){}
@SuppressWarnings("unchecked")
public Queue (int size)
{
if (size <= 0)
throw new IllegalArgumentException("Size cannot be less than or equal to 0!");
this.size = size;
QueueArr = (T[]) new Object[size];
front = -1;
back = -1;
}
public boolean isEmpty ()
{
if (front == -1 &&back == -1)
return true;
else
return false;
}
public boolean isFull()
{
return (back +1) % size == front;
}
public void enQueue ( T ele)
{
if (isFull())
throw new IllegalStateException ("The Queue is full!");
else if (isEmpty())
{
front++;
back++;
}
else
{
back +=1;
}
QueueArr[back] = ele;
}
public void deQueue()
{
if (isEmpty())
throw new IllegalStateException("Can't dequeue an empty queue!");
else if (front == back)
{
front =-1;
back = -1;
}
else
{
front = (front + 1) % size;
}
}
public T Front()
{
if(front == -1)
{
throw new IllegalStateException("Can't return from an empty queue!");
}
return QueueArr[front];
}
@Override
public String toString()
{
return ("front is " + front + ", back is " + back +", size is " + size + "Queue is " + Arrays.toString(QueueArr));
}
}
我使用循环数组算法实现了Queue数据结构,我试图在另一个类中实现这个Queue类。
例如:公共类库存{}
会是这样的:
public class Inventory extends Queue{}
我收到警告&#34;队列是原始类型。对泛型类型Queue的引用应该参数化&#34;当我在上面这一行时。
我是Java的初学者。感谢您的帮助。
答案 0 :(得分:1)
在重复使用课程之前,您需要问自己,is Inventoty a queue或inventory has a queue?可以理解,您将知道库存是否需要扩展队列,或者是否具有类型为队列的字段。
您需要问自己回答这个问题的一些问题:
front()
,enqueue()
和dequeue()
?Inventory
来支持非Queue
的数据(可能Stack
?) - has-a关系通常更容易重构。Inventory
传递给接受Queue
作为参数的方法?如果库存是一个队列(我不相信你想要的),你确实需要扩展它:
public class Inventory <T> extends Queue<T>{}
或者如果Inventory在队列中只有一种类型的元素(让它为Item
):
public class Inventory extends Queue<Item>{}
但是,如果更可能的情况和库存有一个队列,则需要在库存中分配一个类型为Queue
的字段:
public class Inventory <T> {
private Queue<T> queue;
}
或再次,如果它只有一种类型的项目:
public class Inventory {
private Queue<Item> queue;
}
答案 1 :(得分:0)
您的Queue
是参数化类。 Java警告你,扩展它的类(在你的情况下为Inventory
)也应该参数化:
public class Inventory <T> extends Queue<T> {
// ...
}