我已经使用Stack
使用类TOKEN
的内容,现在我想首先使用堆栈制作并初始化新的Stack
。
首先我认为是C#的代码,比如
Stack<Token> e_infixTokens = new Stack<Token>(infixTokens);
C#的Stack constuctor使用另一个堆栈参数,但我认为JAVA没有。我是对的吗?
所以,这是我的代码的一部分,
private Stack<Token> infixTokens;
private Stack<Token> postfixTokens;
Formula(String formula){
this.formula = formula;
this.infixTokens = new Stack<>();
this.postfixTokens = new Stack<>();
下面几行,我用这句话。
Stack<Token> e_infixTokens = new Stack<>(infixTokens);
发生错误。错误信息是:
Stack中的Stack()无法应用于Java.util.Stack
答案 0 :(得分:0)
一个简单的方法是这样的。
Stack<String> stackCopy = (Stack<String>) stack1.clone();
此方法来自java.util.Vector.clone(),因此它可能是一个快速实现。
另一个是这样的,测试后非常慢。
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.
此外,呼叫和添加&#39;的速度。并呼吁推动&#39;在第二种方法中类似。