如何在另一个 class 中使用 Queue.java
how to use Queue.java in another class
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));
}
}
我已经使用循环数组算法实现了队列数据结构,我正在尝试在另一个 class.
中实现这个队列 class
例如:public class 库存{}
会不会是这样的:
public class Inventory extends Queue{}
当我执行上面的行时,我确实收到警告 "Queue is a raw type. References to generic type Queue should be parameterized"。
我是 Java.Thank 的初学者,希望能提供帮助。
您的 Queue
是参数化的 class。 Java 警告您扩展它的 class(Inventory
,在您的情况下)可能也应该被参数化:
public class Inventory <T> extends Queue<T> {
// ...
}
在重复使用 class 之前,您需要问问自己,is Inventoty a queue or does inventory has a queue?明白这一点,你就会知道Inventory是否需要扩展Queue,或者有一个类型为Queue的字段。
回答问题需要问自己的一些问题:
- 是否要在 Inventory 上使用所有队列的方法,包括
front()
、enqueue()
和 dequeue()
?
- 您希望以后能够重用
Inventory
来支持不是 Queue
的数据(也许 Stack
?)- 有关系通常更容易重构。
- 您希望能够将
Inventory
传递给接受 Queue
作为参数的方法吗?
如果库存是一个队列(我不相信这是你想要的),你确实需要扩展它:
public class Inventory <T> extends Queue<T>{}
或者如果 Inventory 在队列中只有一种类型的元素(假设为 Item
):
public class Inventory extends Queue<Item>{}
但是,如果更可能的情况,Inventory有一个Queue,则需要在Inventory中分配一个字段,类型为Queue
:
public class Inventory <T> {
private Queue<T> queue;
}
或者,如果它只有一种类型的项目:
public class Inventory {
private Queue<Item> queue;
}
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));
}
}
我已经使用循环数组算法实现了队列数据结构,我正在尝试在另一个 class.
中实现这个队列 class例如:public class 库存{}
会不会是这样的:
public class Inventory extends Queue{}
当我执行上面的行时,我确实收到警告 "Queue is a raw type. References to generic type Queue should be parameterized"。
我是 Java.Thank 的初学者,希望能提供帮助。
您的 Queue
是参数化的 class。 Java 警告您扩展它的 class(Inventory
,在您的情况下)可能也应该被参数化:
public class Inventory <T> extends Queue<T> {
// ...
}
在重复使用 class 之前,您需要问问自己,is Inventoty a queue or does inventory has a queue?明白这一点,你就会知道Inventory是否需要扩展Queue,或者有一个类型为Queue的字段。
回答问题需要问自己的一些问题:
- 是否要在 Inventory 上使用所有队列的方法,包括
front()
、enqueue()
和dequeue()
? - 您希望以后能够重用
Inventory
来支持不是Queue
的数据(也许Stack
?)- 有关系通常更容易重构。 - 您希望能够将
Inventory
传递给接受Queue
作为参数的方法吗?
如果库存是一个队列(我不相信这是你想要的),你确实需要扩展它:
public class Inventory <T> extends Queue<T>{}
或者如果 Inventory 在队列中只有一种类型的元素(假设为 Item
):
public class Inventory extends Queue<Item>{}
但是,如果更可能的情况,Inventory有一个Queue,则需要在Inventory中分配一个字段,类型为Queue
:
public class Inventory <T> {
private Queue<T> queue;
}
或者,如果它只有一种类型的项目:
public class Inventory {
private Queue<Item> queue;
}