鱼C论坛

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

泛型类

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

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

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

x
java编程完成泛型类GenericStack(栈),GenericStack的基本功能设计要求:创建栈、出栈、入栈、获取栈顶元素、判栈空。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

  5.     public GenericStack(int size) {
  6.         this.size = size;
  7.         elements = (T[]) new Object[size];
  8.         top = -1;
  9.     }

  10.     public void push(T element) {
  11.         if (top == size - 1) {
  12.             throw new StackOverflowError("Stack is full");
  13.         }
  14.         elements[++top] = element;
  15.     }

  16.     public T pop() {
  17.         if (top == -1) {
  18.             throw new IllegalStateException("Stack is empty");
  19.         }
  20.         return elements[top--];
  21.     }

  22.     public T peek() {
  23.         if (top == -1) {
  24.             throw new IllegalStateException("Stack is empty");
  25.         }
  26.         return elements[top];
  27.     }

  28.     public boolean isEmpty() {
  29.         return top == -1;
  30.     }
  31. }
复制代码


这段代码定义了一个泛型类 GenericStack ,它具有创建栈、出栈、入栈、获取栈顶元素、判栈空的基本功能。在构造函数中,使用数组来存储栈的元素,并通过泛型 T 来表示栈中的元素类型。 push 方法用于入栈操作, pop 方法用于出栈操作, peek 方法用于获取栈顶元素, isEmpty 方法用于判断栈是否为空。
小甲鱼最新课程 -> https://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的基本功能设计。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-12 20:11:01 | 显示全部楼层
在Java中,我们可以使用泛型来编写一个通用的栈(Stack)类,这样我们就可以很轻松地用它来存储任何类型的对象。以下是一个基本的泛型栈(GenericStack)类的设计:

  1. public class GenericStack<E> {
  2.     private E[] elements;
  3.     private int size = 0;
  4.     private static final int DEFAULT_INITIAL_CAPACITY = 16;
  5.     @SuppressWarnings("unchecked")
  6.     public GenericStack() {
  7.         elements = (E[]) new Object[DEFAULT_INITIAL_CAPACITY];
  8.     }
  9.     public void push(E e) {
  10.         if (size == elements.length) {
  11.             E[] temp = elements;
  12.             elements = (E[])new Object[temp.length * 2];
  13.             System.arraycopy(temp, 0, elements, 0, size);
  14.         }
  15.         elements[size++] = e;
  16.     }
  17.     public E pop() {
  18.         if (isEmpty()) {
  19.             return null;
  20.         }
  21.         E value = elements[--size];
  22.         elements[size] = null;
  23.         return value;
  24.     }
  25.     public E peek() {
  26.         if (isEmpty()) {
  27.             return null;
  28.         }
  29.         return elements[size - 1];
  30.     }
  31.     public boolean isEmpty() {
  32.         return size == 0;
  33.     }
  34.     public int getSize() {
  35.         return size;
  36.     }
  37. }
复制代码


这个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[]
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-3 12:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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