Java > if(stk.peek().compareTo(min)
请记住,如果您计划在此堆栈中使用自己的类型,则必须使它们具有可比性并实现compareTo方法。所需的行为是什么?不确定您的意思。。。该程序除了将元素推送到堆栈上、检查要推送到堆栈上的最小值、最后一个要推送到堆栈上的值以及从堆栈上弹出元素之外,没有任何内在的用途。那么你的问题是什么?我请求帮助将上述代码转换为使用泛型,而不是原语。这是OP中的第一句话。它已经在使用泛型了。像Java > if(stk.peek().compareTo(min),java,generics,stack,primitive,Java,Generics,Stack,Primitive,请记住,如果您计划在此堆栈中使用自己的类型,则必须使它们具有可比性并实现compareTo方法。所需的行为是什么?不确定您的意思。。。该程序除了将元素推送到堆栈上、检查要推送到堆栈上的最小值、最后一个要推送到堆栈上的值以及从堆栈上弹出元素之外,没有任何内在的用途。那么你的问题是什么?我请求帮助将上述代码转换为使用泛型,而不是原语。这是OP中的第一句话。它已经在使用泛型了。像50这样的基本值是自动装箱并插入到通用堆栈中的。此外,在大多数语言中,泛型可以是基本的,但在Java中不能。或者您正在尝试创
50
这样的基本值是自动装箱并插入到通用堆栈中的。此外,在大多数语言中,泛型可以是基本的,但在Java中不能。或者您正在尝试创建一个可以与任何类型一起工作的实现?期望的行为是什么?不确定您的意思。。。该程序除了将元素推送到堆栈上、检查要推送到堆栈上的最小值、最后一个要推送到堆栈上的值以及从堆栈上弹出元素之外,没有任何内在的用途。那么你的问题是什么?我请求帮助将上述代码转换为使用泛型,而不是原语。这是OP中的第一句话。它已经在使用泛型了。像50
这样的基本值是自动装箱并插入到通用堆栈中的。此外,在大多数语言中,泛型可以是基本的,但在Java中不能。或者你正在尝试创建一个可以与任何类型一起工作的实现吗?做家庭作业来学习一些东西从来都不是毫无意义的。当一个人自己做作业时,那就是……尽管如此,我还是看到了许多更糟糕的问题,而你的回答涵盖了我自己会提到的所有细节。请允许我投赞成票。请记录在案:这主要是关于措辞。如果你曾经写过“注意java有一个内置的堆栈,重新发明轮子是不好的做法,除非是为了学习”,我不会在一开始就做出讽刺性的评论。重点是,你可以通过指定要使用的类型来创建泛型类型的实例。您可以创建一个MyStack
和一个MyStack
,以及一个MyStack
,但是一旦创建,每个实例都必须使用指定的类型(在
之间)。将整数添加到字符串集合是没有意义的。从技术上讲,通过使用包装器和泛型方法构建这样的泛型是可能的,但对于集合来说,这通常没有多大意义。也有例外在这种情况下,目的是我们可以创建我们需要的任何类型的堆栈,而不必为我们正在使用的特定类型的值实现一个堆栈。它实际上与原始值无关,而是与我们被允许的具体程度和一般程度有关。尽可能的通用是好的,像Push
和Pop
这样的操作不依赖于泛型类型,只要它是已知的。当我们在MyStack=new MyStack()中指定它时就知道了代码>。简而言之,输入安全的代码重用。做家庭作业来学习一些东西从来都不是毫无意义的。当一个人自己做作业时,那就是……尽管如此,我还是看到了许多更糟糕的问题,而你的回答涵盖了我自己会提到的所有细节。请允许我投赞成票。请记录在案:这主要是关于措辞。如果你曾经写过“注意java有一个内置的堆栈,重新发明轮子是不好的做法,除非是为了学习”,我不会在一开始就做出讽刺性的评论。重点是,你可以通过指定要使用的类型来创建泛型类型的实例。您可以创建一个MyStack
和一个MyStack
,以及一个MyStack
,但是一旦创建,每个实例都必须使用指定的类型(在
之间)。将整数添加到字符串集合是没有意义的。从技术上讲,通过使用包装器和泛型方法构建这样的泛型是可能的,但对于集合来说,这通常没有多大意义。也有例外在这种情况下,目的是我们可以创建我们需要的任何类型的堆栈,而不必为我们正在使用的特定类型的值实现一个堆栈。它实际上与原始值无关,而是与我们被允许的具体程度和一般程度有关。尽可能的通用是好的,像Push
和Pop
这样的操作不依赖于泛型类型,只要它是已知的。当我们在MyStack=new MyStack()中指定它时就知道了代码>。简而言之,类型安全代码重用。
import java.io.*;
import java.util.*;
public class LinkedListStack {
public static Stack<Integer> stk = new Stack<Integer>();
public static int min, push, top;
public static void main(String[] args) {
//initialize random integer generator
Random rand = new Random();
System.out.println("Stack empty --> top = null, min = null");
stackPush(rand.nextInt(50));
//first value in the stack is the minimum until a smaller integer is pushed
min = stk.peek();
stackPush(rand.nextInt(50));
stackPush(rand.nextInt(50));
stackPop();
stackPush(rand.nextInt(50));
stackPush(rand.nextInt(50));
stackPush(rand.nextInt(50));
stackPush(rand.nextInt(50));
stackPop();
stackPop();
stackPop();
stackPop();
stackPop();
stackPop();
stackPop();
if (!stk.isEmpty()) {
System.out.print("\nFinal stack: ");
for(int x : stk) {
System.out.print(x + " ");
}
} else {
System.out.print("\nStack is empty!");
}
System.out.println();
}
public static int stackPush(int pushInt) {
try {
stk.push(pushInt);
if (stk.peek() < min) {
min = stk.peek();
}
top = stk.peek();
System.out.println("Push " + pushInt + " --> top = " + top + ", min = " + min);
} catch (EmptyStackException e){
System.out.println("ERROR");
}
return pushInt;
}
public static void stackPop() {
try {
stk.pop();
if (stk.peek() < min) {
min = stk.peek();
}
top = stk.peek();
System.out.println("Pop --> top = " + top + ", min = " + min);
} catch (EmptyStackException e) {
System.out.println("Stack already empty!");
}
}
}
class MyStack<E> {
private final Stack<E> wrapped = new Stack<E>();
public void push(E element) {
wrapped.push(e);
}
public E pop() {
return wrapped.pop();
}
}
public class Program {
public static void main(String[] args) {
System.out.println("Stack empty --> top = null, min = null");
MyStack<String> stack = new MyStack<>();
stack.push("hello");
stack.push("world");
}
public class LinkedListStack<T extends Comparable<T>> {
public static Stack<T> stk = new Stack<T>();
public static T min, push, top;
if (stk.peek().compareTo(min) < 0) {
min = stk.peek();
}