Java-如何使用另一个现有堆栈初始化堆栈?

Java-如何使用另一个现有堆栈初始化堆栈?,java,android,stack,Java,Android,Stack,我已经在使用Stackwhat using class type forTOKEN,现在我想先使用Stack创建并初始化新的Stack 首先我认为C#的代码 Stack e_infixTokens=新堆栈(infixTokens) C#的堆栈构造函数使用另一个堆栈作为参数,但我认为JAVA没有。我说得对吗 这是我代码的开始部分 private Stack<Token> infixTokens; private Stack<Token> postfixTokens; Fo

我已经在使用
Stack
what using class type for
TOKEN
,现在我想先使用Stack创建并初始化新的
Stack

首先我认为C#的代码

Stack e_infixTokens=新堆栈(infixTokens)

C#的堆栈构造函数使用另一个堆栈作为参数,但我认为JAVA没有。我说得对吗

这是我代码的开始部分

private Stack<Token> infixTokens;
private Stack<Token> postfixTokens;

Formula(String formula){
    this.formula = formula;
    this.infixTokens = new Stack<>();
    this.postfixTokens = new Stack<>();
私有堆栈内挤;
私有堆栈后缀标记;
公式(字符串公式){
这个公式=公式;
this.infixTokens=新堆栈();
this.postfix令牌=新堆栈();
下面几行,我用这句话

Stack<Token> e_infixTokens = new Stack<>(infixTokens);
Stack e_infixTokens=新堆栈(infixTokens);
发生错误。错误消息为:

堆栈中的Stack()不能应用于Java.util.Stack


一个简单的方法是这样的

Stack<String> stackCopy = (Stack<String>) stack1.clone();

此外,在第二种方法中,调用“add”和调用“push”的速度相似。

不完全清楚您在寻找什么。是否要新堆栈(
e_infixTokens
)与
infixTokens
相同的
Stack
?还是要制作一个新的
Stack
,它是
infixTokens
的副本?对于非C用户来说,一些说明会很好。尝试阅读您正在使用的类的javadoc。这里有一个所有可用的构造函数和方法的列表。
Stack<String> stackCopy = new Stack<String>();
for (String string : stack) {
    stackCopy2.add(string);
}
public static void main(String[] args) throws Exception {

    Stack<String> stack = new Stack<String>();
    for (int i = 0; i < 1000; i++) {
        stack.push("" + i);
    }


    {
        Stack<String> stackCopy = null;
        long time = System.currentTimeMillis();
        final int numIterations = 100000;
        for (int i = 0; i < numIterations; i++) {
            stackCopy = (Stack<String>) stack.clone();
        }
        System.out.println("stackCopy.get(0) 1 = " + stackCopy.get(0));

        long millis = System.currentTimeMillis() - time;
        System.out.println("Time taken for this: "
                + (millis > 100000 ? (millis / 1000) + " seconds." : millis + " milliseconds."));
    }
    {
        Stack<String> stackCopy = null;
        long time = System.currentTimeMillis();
        final int numIterations = 100000;
        for (int i = 0; i < numIterations; i++) {
            stackCopy = new Stack<String>();
            for (String string : stack) {
                stackCopy.add(string);
            }
        }
        System.out.println("stackCopy.get(0) 2 = " + stackCopy.get(0));

        long millis = System.currentTimeMillis() - time;
        System.out.println("Time taken for this: "
                + (millis > 100000 ? (millis / 1000) + " seconds." : millis + " milliseconds."));
    }
}
stackCopy.get(0) 1 = 0
Time taken for this: 70 milliseconds.
stackCopy.get(0) 2 = 0
Time taken for this: 4098 milliseconds.