gpt4 book ai didi

java - 如何在另一个类中使用 Queue.java

转载 作者:行者123 更新时间:2023-11-30 11:07:41 25 4
gpt4 key购买 nike

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));
}
}

我已经使用循环数组算法实现了队列数据结构,我正在尝试在另一个类中实现这个队列类。

例如:公共(public)类 Inventory{}

会不会是这样的:

public class Inventory extends Queue{}

当我执行上述行时,我确实收到警告“Queue is a raw type. References to generic type Queue should be parameterized”。

我是 Java 的初学者。感谢您的帮助。

最佳答案

在重用一个类之前,你需要问问自己,is Inventoty a queue或者 inventory has a queue ?明白这一点,你就会知道Inventory是否需要扩展Queue,或者有一个类型为Queue的字段。

为了回答这个问题,你需要问自己一些问题:

  1. 是否要在 Inventory 上使用队列的所有方法,包括 front()enqueue()dequeue()
  2. 您是否希望以后能够重用Inventory 来支持不是Queue 的数据(可能是Stack?)- has-a关系通常更容易重构。
  3. 您是否希望能够将 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;
}

关于java - 如何在另一个类中使用 Queue.java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28826432/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com