泛型类
java编程完成泛型类GenericStack(栈),GenericStack的基本功能设计要求:创建栈、出栈、入栈、获取栈顶元素、判栈空。 public class GenericStack<T> {private int size;
private T[] elements;
private int top;
public GenericStack(int size) {
this.size = size;
elements = (T[]) new Object;
top = -1;
}
public void push(T element) {
if (top == size - 1) {
throw new StackOverflowError("Stack is full");
}
elements[++top] = element;
}
public T pop() {
if (top == -1) {
throw new IllegalStateException("Stack is empty");
}
return elements;
}
public T peek() {
if (top == -1) {
throw new IllegalStateException("Stack is empty");
}
return elements;
}
public boolean isEmpty() {
return top == -1;
}
}
这段代码定义了一个泛型类 GenericStack ,它具有创建栈、出栈、入栈、获取栈顶元素、判栈空的基本功能。在构造函数中,使用数组来存储栈的元素,并通过泛型 T 来表示栈中的元素类型。 push 方法用于入栈操作, pop 方法用于出栈操作, peek 方法用于获取栈顶元素, isEmpty 方法用于判断栈是否为空。 当然,以下是一个简单的泛型类GenericStack的实现,满足上述的基本功能设计要求:
java
import java.util.EmptyStackException;
public class GenericStack<T> {
private Node<T> top;
private static class Node<T> {
T data;
Node<T> next;
Node(T data) {
this.data = data;
}
}
public void push(T item) {
Node<T> newNode = new Node<>(item);
newNode.next = top;
top = newNode;
}
public T pop() {
if (isEmpty()) {
throw new EmptyStackException();
}
T result = top.data;
top = top.next;
return result;
}
public T peek() {
if (isEmpty()) {
throw new EmptyStackException();
}
return top.data;
}
public boolean isEmpty() {
return top == null;
}
}
这个泛型类GenericStack实现了栈的基本功能,包括入栈、出栈、获取栈顶元素和判栈空。你可以根据这个基础上进行进一步扩展和优化。希望这个例子能够帮助你完成泛型类GenericStack的基本功能设计。 在Java中,我们可以使用泛型来编写一个通用的栈(Stack)类,这样我们就可以很轻松地用它来存储任何类型的对象。以下是一个基本的泛型栈(GenericStack)类的设计:
public class GenericStack<E> {
private E[] elements;
private int size = 0;
private static final int DEFAULT_INITIAL_CAPACITY = 16;
@SuppressWarnings("unchecked")
public GenericStack() {
elements = (E[]) new Object;
}
public void push(E e) {
if (size == elements.length) {
E[] temp = elements;
elements = (E[])new Object;
System.arraycopy(temp, 0, elements, 0, size);
}
elements = e;
}
public E pop() {
if (isEmpty()) {
return null;
}
E value = elements[--size];
elements = null;
return value;
}
public E peek() {
if (isEmpty()) {
return null;
}
return elements;
}
public boolean isEmpty() {
return size == 0;
}
public int getSize() {
return size;
}
}
这个GenericStack类使用了Java的泛型参数<E>,这意味着你可以用任何类型来替代E,创建出一个存储特定类型的栈。例如,GenericStack<String>会创建一个存储字符串的栈,而GenericStack<Integer>则会创建一个存储整型的栈。
在这个类中,我们定义了以下几个方法:
- push(E e):将一个元素压入栈顶。如果数组已满,那么数组的容量将被扩大一倍。
- pop():删除并返回栈顶元素。如果栈为空,则返回null。
- peek():返回栈顶元素,但不删除它。如果栈为空,则返回null。
- isEmpty():如果栈为空,则返回true;否则,返回false。
- getSize():返回栈中的元素数量。
注意,为了避免类型擦除问题,我们在构造函数中使用了@SuppressWarnings("unchecked")注解。这是因为Java的泛型是通过类型擦除实现的,这意味着在运行时,泛型类型E会被替换为其上界(这里是Object)。因此,我们不能直接创建一个E类型的数组,而需要创建一个Object类型的数组,然后将其强制转换为E[]。
页:
[1]