鱼C论坛

 找回密码
 立即注册
查看: 636|回复: 3

泛型类

[复制链接]
发表于 2023-11-12 17:37:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
java编程完成泛型类GenericStack(栈),GenericStack的基本功能设计要求:创建栈、出栈、入栈、获取栈顶元素、判栈空。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-11-12 17:38:02 | 显示全部楼层
public class GenericStack<T> {
    private int size;
    private T[] elements;
    private int top;

    public GenericStack(int size) {
        this.size = size;
        elements = (T[]) new Object[size];
        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[top--];
    }

    public T peek() {
        if (top == -1) {
            throw new IllegalStateException("Stack is empty");
        }
        return elements[top];
    }

    public boolean isEmpty() {
        return top == -1;
    }
}

这段代码定义了一个泛型类 GenericStack ,它具有创建栈、出栈、入栈、获取栈顶元素、判栈空的基本功能。在构造函数中,使用数组来存储栈的元素,并通过泛型 T 来表示栈中的元素类型。 push 方法用于入栈操作, pop 方法用于出栈操作, peek 方法用于获取栈顶元素, isEmpty 方法用于判断栈是否为空。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-12 17:38:47 | 显示全部楼层
当然,以下是一个简单的泛型类GenericStack的实现,满足上述的基本功能设计要求:

[/code]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;
    }
}
[/code]

这个泛型类GenericStack实现了栈的基本功能,包括入栈、出栈、获取栈顶元素和判栈空。你可以根据这个基础上进行进一步扩展和优化。希望这个例子能够帮助你完成泛型类GenericStack的基本功能设计。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-12 20:11:01 | 显示全部楼层
在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[DEFAULT_INITIAL_CAPACITY];    }    public void push(E e) {        if (size == elements.length) {            E[] temp = elements;            elements = (E[])new Object[temp.length * 2];            System.arraycopy(temp, 0, elements, 0, size);        }        elements[size++] = e;    }    public E pop() {        if (isEmpty()) {            return null;        }        E value = elements[--size];        elements[size] = null;        return value;    }    public E peek() {        if (isEmpty()) {            return null;        }        return elements[size - 1];    }    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[]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-31 02:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表